python - 如何在 python 中处理字典的多个键?

标签 python list dictionary

我一直在寻找如果发现重复的键,如何为字典中的单个键添加多个 val。

举个例子:

list_1 = ['4', '6' ,'8', '8']
list_2 = ['a', 'b', 'c', 'd']
new_dict = dict(zip(list_1,list_2))
...output...
{'8': 'd', '4': 'a', '6': 'b'}

预期输出:

{'8': 'c,d', '4': 'a', '6': 'b'}

为了处理上面的两个列表并将它们组合成一个字典,我将面临一定的挑战,即我们不能在字典的“键”中有两个 8,这是默认行为,我理解为什么! !

处理这种情况的一些选项是:

1) 查找'key'是否已经存在于dict中,如果存在,则将新的val附加到'key'

2) 创建一个可变对象来引用每个键,这样你就可以拥有多个重复键 ~~不是我的用例

那么,我怎样才能使用选项#1 获得预期的输出?

最佳答案

默认字典/dict.setdefault

让我们开始吧:

  1. 连续迭代项目
  2. 追加属于同一键的字符串值
  3. 完成后,遍历每个键值对并将所有内容连接在一起以获得最终结果。

from collections import defaultdict

d = defaultdict(list)   
for i, j in zip(list_1, list_2):
    d[i].append(j)

defaultdict 使事情变得简单,并且附加高效。如果您不想使用 defaultdict,请改用 dict.setdefault(但这有点低效):

d = {}
for i, j in zip(list_1, list_2):
    d.setdefault(i, []).append(j)

new_dict = {k : ','.join(v) for k, v in d.items()})
print(new_dict)
{'4': 'a', '6': 'b', '8': 'c,d'}

Pandas DataFrame.groupby + agg

如果您想要高容量的性能,请尝试使用 pandas:

import pandas as pd

df = pd.DataFrame({'A' : list_1, 'B' : list_2})
new_dict = df.groupby('A').B.agg(','.join).to_dict()

print(new_dict)
{'4': 'a', '6': 'b', '8': 'c,d'}

关于python - 如何在 python 中处理字典的多个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50579671/

相关文章:

python - 如何在多个 GPU 的 Pytorch 示例中利用 DistributedDataParallel 的世界大小参数?

c++ - 全局列出对象并在 c/c++ 中添加类的本地对象

c# - 创建一个以数组为值的字典

python - 按嵌套列表的最高值对字典进行排序

python - .join() 传入整数列表时出现 TypeError, 'expected str instance'

python - Django:如何动态加载表单到当前html页面

php - 世界所有国家的 list /数据库?

r - 在嵌套列表中查找元素的索引?

python - 如何通过类层次结构聚合字典 (Python)

python - 如何使用数据库值在 django 中创建自定义表单