在python中搜索字典中的列表



我有一个用户字典,其中包含两个列表作为每个键的值。我有一个项目列表词典,其中包含作为值的列表。

dict_users = {
'User1': [['item10', 'item3', 'item6'], ['item1', 'item7', 'item8']], 
'User2': [['item10', 'item6', 'item2'], ['item2', 'item10', 'item5']],
'User3': [['item2', 'item9', 'item3'], ['item8', 'item3', 'item1']]
}
dict_items = {
'itemlist1': ['item10', 'item3', 'item1', 'item7', 'item8', 'item4'],
'itemlist2': ['item2', 'item5', 'item2', 'item3', 'item4', 'item6'],
'itemlist3': ['item9', 'item6', 'item1', 'item7', 'item2', 'item4']
}

现在,我想为dict_users中的每个用户找到dict_items中的一个itemlist,该itemlist包含(至少(第一个列表中的2个项目和第二个列表中为dict_user中用户值的2个项。因此,在本例中,User1将与itemlist1配对。如果这本书出现在一本新的字典里,那就太好了:

dict_pairs = {
'User1': 'itemlist1'
}
etc

谢谢!

这只需要set intersection:

dict_pairs = {}
for user, lists in dict_users.items():
for itemlist, items in dict_items.items():
items = set(items)
if all(len(items & set(lst)) >= 2 for lst in lists):
dict_pairs[user] = itemlist
break

对于每个用户,我们遍历项目列表。然后,我们检查用户的all子列表是否与项目列表具有大于(或等于(2的交集。如果是这样,我们将其添加到最后的dict中,然后继续。

对于您的示例dicts,这将给出:

dict_pairs = {
'User1': 'itemlist1',
'User2': 'itemlist2'
}

最新更新