我有一个用户字典,其中包含两个列表作为每个键的值。我有一个项目列表词典,其中包含作为值的列表。
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'
}