python - 如何反转字典项目并列出按公共值分组的键
问题描述
我有一本字典,我想按常见值进行分组:
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 个项目。任何帮助将不胜感激,因为我已经尝试了几个小时不同的事情。
解决方案
使用 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']})
推荐阅读
- python - Pandas 数据框取消堆叠数据并创建新列
- wordpress - 创建一个 Wordpress 管理菜单项并链接到一个页面
- python - /login/ 处的 AttributeError:无法通过用户实例访问管理器
- selenium - 在 Microsoft HTML 组件中找不到元素
- javascript - 如何在 Angular 中一段时间后在 mat-input 上设置错误?
- c - 纯C:在头文件中使用typdef void StructName时,头文件不能包含在.c文件中
- android - RecyclerView 不会在带有 DrawerLayout 和底页的 CoordinatorLayout 内滚动
- scala - Scala UDF 函数对数组列进行操作并返回自定义值
- visual-studio-code - VS 代码没有在冒号后添加 4 个空格
- typescript - 有没有办法在 Typescript 中只提取某种类型的接口的值?