python - 将 2 个字典与公共(public)键组合

标签 python python-2.7 dictionary

我有两个字典,需要合并其中相似键的值。这是一个例子:

dict1 = {'key1':[value11,value12,value13] , 'key2':[value21,value22,value23]}
dict2 = {'key1':[value14,value15] , 'key2':[value24,value25]}

我用过:

dict3 = {}
for key in (dict1.viewkeys() | dict2.keys()):
    if key in dict1: dict3.setdefault(key, []).append(dict1[key])
    if key in dict2: dict3.setdefault(key, []).append(dict2[key])

这给了我:

dict3 = {'key1':[[value11,value12,value13],[value14,value15]] , 'key2':[[value21,value22,value23],[value24,value25]]}

我想要的是一个简单的,比如:

期望的输出:

 dict3 = {'key1':[value11,value12,value13,value14,value15] , 'key2':[value21,value22,value23,value24,value25]}

最佳答案

您需要做的就是将 append 修改为 extend,然后它将添加列表的元素,而不是添加列表本身。查看list docs有关 appendextend 之间区别的更多详细信息。

dict1 = {'key1':['value11','value12','value13'] , 'key2':['value21','value22','value23']}
dict2 = {'key1':['value14','value15'] , 'key2':['value24','value25']}

dict3 = {}
for key in set().union(dict1, dict2):
    if key in dict1: dict3.setdefault(key, []).extend(dict1[key])
    if key in dict2: dict3.setdefault(key, []).extend(dict2[key])

print(dict3)
# {'key2': ['value21', 'value22', 'value23', 'value24', 'value25'], 'key1': ['value11', 'value12', 'value13', 'value14', 'value15']}

或者,您可以使用 collections.defaultdict默认设置为 list,如下所示。

from collections import defaultdict
dict3 = defaultdict(list)

for key in set().union(dict1, dict2):
  for dic in [dict1, dict2]:
    if key in dic:
      dict3[key] += dic[key]

关于python - 将 2 个字典与公共(public)键组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25405861/

相关文章:

python - 删除/重新排列/添加非常大的 tsv 文件 Python

python - 如何在 Jupyter Notebook 中加载 CSV 文件?

python - 将Elastic集群数据读入python数据框

python-2.7 - Python 2 : someIterator. next() 与 next(someIterator):Python 3

Java:具有相同键的 map 的 map

python - AttributeError : Can only use . 具有 datetimelike 值的 dt 访问器

python - 如何在 Django 表单中使用 CSS?

python - 将Python字符串拆分为对列表

python-3.x - Python 字典特征提取

python基于键匹配合并字典的最快方法