python - 如何反转字典项并列出按公共(public)值分组的键

标签 python list dictionary

这个问题在这里已经有了答案:





Dictionary comprehension for swapping keys/values in a dict with multiple equal values

(3 个回答)


2年前关闭。




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

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 个项目。任何帮助将不胜感激,因为我已经尝试了几个小时不同的事情。

最佳答案

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

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 - 如何反转字典项并列出按公共(public)值分组的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61427141/

相关文章:

python - 我如何定义一个函数,如果列表中的所有项目都不同则返回 False,否则返回 True

python - 查找列表之间的差异并将差异附加到列表,但对于 40 个不同的列表 - python

python - 检查项目符号点是否在列表中

javascript - 如何在另一张 map 中进行映射,获取每张第一张 map 的索引?

python - 使用 SWIG 用指针参数包装 C 函数

python - 合并索引包含另一个(但不相同)的数据帧

python - 如何在水平列表中显示Python函数的输出,以便我们可以重用它?

C++ 服务提供商

c++ - std::map 扩展初始值设定项列表是什么样的?

python - 通过 SOAP v2 创建 Magento 产品