列表字典 - 在字典中查找项目(列表)相同的键



我正在寻找一种方法来识别字典中项目相同的键-然而,有数百个键,每个项目都是长度为60-70的元素的列表

我想找到所有有相同项目的钥匙;我发现了这个并找到了它https://www.geeksforgeeks.org/python-find-keys-with-duplicate-values-in-dictionary/但当项目是列表时,这是一个问题。我将列表转换为字符串,并尝试了翻转路线,但键很难处理(大量列表作为字符串(,而且似乎不是蟒蛇。

样品:

foo = {'123':['ham','salami','beef','bacon','lamb-chop'], 
'124':['ham','salami','bacon','pepper'],
'125':['ham','salami','bacon','pepper'],
'126':['salami','bacon','lamb-chop']}

对于上面的例子,我可以识别

124, 125 --> ['ham','salami','bacon','pepper']

是相同的,并且

123 --> ['ham','salami','beef','bacon','lamb-chop']

126 --> ['salami','bacon','lamb-chop']

是分开的。

输出可以是字典,例如:

'Group 1':['124,'125'],
'Group 2':['123'],
'Group 3':['126']

其中分组都表示它们具有相同的列表元素。我不介意太多,只是想避免600多个字符串作为字典的关键字。

我尝试过从字典中构建panda数据帧,将项目视为集合并进行比较,但我没有比翻转路线更好地管理它

我还有第二个问题与此有关,所以当它发布时,我会在这里放一个链接。。。

您可以构建一个反向dict,其中列表作为键(必须转换为不可变元组(,匹配id列表作为值:

from collections import defaultdict
foo = {'123':['ham','salami','beef','bacon','lamb-chop'], 
'124':['ham','salami','bacon','pepper'],
'125':['ham','salami','bacon','pepper'],
'126':['salami','bacon','lamb-chop']}
list_to_ids = defaultdict(list)
for key, lst in foo.items():
list_to_ids[tuple(lst)].append(key)

print(list_to_ids)
# defaultdict(<class 'list'>, {('ham', 'salami', 'beef', 'bacon', 'lamb-chop'): ['123'],
# ('ham', 'salami', 'bacon', 'pepper'): ['124', '125'],
# ('salami', 'bacon', 'lamb-chop'): ['126']})

最新更新