[英]How to merge 2 dictionaries in python 3.7 and get a list if there are multiple values per key
我有以下两个字典:
dict_1 = {'a': 1, 'b': 2, 'e': 5}
dict_2 = {'c': 3, 'd': 4, 'e': 7}
我想合并它们,结果是:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': [5,7]}
列表的顺序很重要,所以 dict_1 与 dict_2 合并应该得到 'e': [5,7] 和 dict_2 与 dict_1 合并应该得到 'e': [7,5]
迭代第二个字典并应用逻辑:新对或列表
result = {**dict_1}
for k, v in dict_2.items():
if k in result:
result[k] = [result[k], v]
else:
result[k] = v
# final sorting
result = {k: result[k] for k in sorted(result)}
这可以通过经典的嵌套循环来解决,并且可以推广到任意数量的字典:
dict_1 = {'a': 1, 'b': 2, 'e': 5}
dict_2 = {'c': 3, 'd': 4, 'e': 7}
out = {}
for d in [dict_1, dict_2]:
for k,v in d.items():
if k in out:
if isinstance(out[k], list):
out[k].append(v)
else:
out[k] = [out[k], v]
else:
out[k] = v
out
输出:
{'a': 1, 'b': 2, 'e': [5, 7], 'c': 3, 'd': 4}
注意。 键将按出现顺序排列,如果需要,您可以在之后对它们进行排序。 这些值按所需的顺序排列
试试这个:
from collections import defaultdict
def merge_dict(x,y):
dd = defaultdict(list)
for d in (x, y): # you can list as many input dicts as you want here
for key, value in d.items():
dd[key].append(value)
dd = dict(sorted(dd.items()))
return dd
测试
x = {'a': 1, 'b': 2, 'e': 5}
y = {'c': 3, 'd': 4, 'e': 7}
print(merge_dict(x,y))
out: {'a': [1], 'b': [2], 'c': [3], 'd': [4], 'e': [5, 7]}
print(merge_dict(y,x))
out: {'a': [1], 'b': [2], 'c': [3], 'd': [4], 'e': [7, 5]}
def combined(d1, d2): commons = {key: [d1[key], d2[key]] for key in (key for key in d1 if key in d2)} return {**d1, **d2, **commons}
你可以试试这个
def update_dictionary(dict_, to_be_update_dict):
for k, v in dict_.items():
if to_be_update_dict.get(k) != None:
to_be_update_dict[k] = to_be_update_dict[k] + [v]
else:
to_be_update_dict[k] = [v]
dict_3 = {}
update_dictionary(dict_1,dict_3)
update_dictionary(dict_2,dict_3)
dict_3
Out[114]: {'a': [1], 'b': [2], 'e': [5, 7], 'c': [3], 'd': [4]}
并按其键对字典进行排序
sorted_dict = dict(sorted(dict_3.items()))
{'a': [1], 'b': [2], 'c': [3], 'd': [4], 'e': [5, 7]}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.