我正在寻找一种在相同项目的字典中ID键的方法-但是,有数百个键,每个项目都是最多 60个列表-70 个元素的长度
我想找到所有具有相同项目的键;我发现了这个并找到了它 https://www.geeksforgeeks.org/python-find-keys-with-duplicate-values-in-dictionary/ 但是当项目是列表时,这是一个问题。我将列表转换为字符串,并尝试了翻转路线,但随后的键却笨拙(大量的字符串列表),而且似乎是非Python的。
示例:
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']
,其中所有分组均表示它们具有相同的list元素。我不太介意-只是想避免使用600多个字符串作为字典的键。
我尝试从字典中构建熊猫数据帧,将项目视为集合并进行比较,但是我没有比翻转路线更好地管理它
我还有第二个与此相关的问题,所以发布时我会在此处放置一个链接...
答案 0 :(得分:-1)
您可以使用列表作为键(必须将其转换为不可变的元组),将匹配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']})