首页 > 解决方案 > 如何反转字典项目并列出按公共值分组的键

问题描述

我有一本字典,我想按常见值进行分组:

init_dict = {'00001': 'string1', '00002': 'string2', '00003': 'string1', '00004': 'string3', '00005': 'string2'}

我想创建一个新字典,对值进行分组并列出如下键:

new_dict = {'string1': ['00001', '00003'], 'string2':['00002', '00004'], 'string3': ['00004']}

我尝试了很多东西,这是我能得到的最接近的。

lookup = 'string1'
all_keys = []
for k, v in init_dict.items():
  if v == lookup:
    all_keys.append(k)
print(all_keys)

这产生了第一个列表:['00001', '00003']所以我想我可以以某种方式遍历一个lookup值列表,但由于我正在使用字符串,所以不能。有没有办法做到这一点,有没有一种相对有效的方法,因为我的初始字典中有 53,000 个项目。任何帮助将不胜感激,因为我已经尝试了几个小时不同的事情。

标签: pythonlistdictionary

解决方案


使用 a defaultdict,指定 alist作为默认参数,并附加字典中的相应值:

from collections import defaultdict

d =  defaultdict(list)
for k,v in init_dict.items():
    d[v].append(k)

print(d)

defaultdict(list,
            {'string1': ['00001', '00003'],
             'string2': ['00002', '00005'],
             'string3': ['00004']})

推荐阅读