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

时间:2020-11-03 15:11:28

标签: python pandas dictionary

我正在寻找一种在相同项目的字典中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多个字符串作为字典的键。

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

我还有第二个与此相关的问题,所以发布时我会在此处放置一个链接...

1 个答案:

答案 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']})