我一直在寻找如果发现重复的键,如何为字典中的单个键添加多个 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
让我们开始吧:
- 连续迭代项目
- 追加属于同一键的字符串值
- 完成后,遍历每个键值对并将所有内容连接在一起以获得最终结果。
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/