dict1 = {'a': 10, 'b': 8, 'c':5}
dict2 = {'d': 6, 'c': 4, 'a':20}
给出两个字典,我想要一个输出。
output = {'a':30, 'b':8, 'c':9, 'd':6}
这是我到目前为止的事情,不太确定接下来要做什么。 我正在寻找在时间/空间复杂度方面有效的解决方案。
def merge_dict(dict1, dict2):
merged_dictionaries = {**dict1, **dict2}
return merged_dictionaries
dict1 = {'a': 10, 'b': 8, 'c':5}
dict2 = {'d': 6, 'c': 4, 'a':20}
merge_dictionaries = merge_dict (dict1, dict2)
sorted_dictionary = sorted(merge_dictionaries)
答案 0 :(得分:3)
如果值是数字,则可以使用计数器:
from collections import Counter
def merge_dicts(*dicts):
return dict(sum(map(Counter, dicts), Counter()))
dict1 = merge_dicts(dict1, dict2)
dict1
# {'a': 30, 'b': 8, 'c': 9, 'd': 6}
这对于仅两个字典来说可能有点多余,所以另一个选择是:
for k, v in dict2.items():
dict1[k] = dict1.setdefault(k, 0) + v
dict1
# {'a': 30, 'b': 8, 'c': 9, 'd': 6}
哪些将dict1
就地更新。
最后,如果您确实需要对结果进行排序(python3.7 +),请使用
result = {k : dict1[k] for k in sorted(dict1)}
答案 1 :(得分:1)
您可以使用dict理解来迭代两个dict的键的有序并集,并输出给定键的两个dict各自值之和的值,默认为0:
{k: dict1.get(k, 0) + dict2.get(k, 0) for k in sorted(dict1.keys() | dict2.keys())}
这将返回:
{'a': 30, 'b': 8, 'c': 9, 'd': 6}
答案 2 :(得分:0)
result = dict(Counter(dict1) + Counter(dict2))
result = {k: result[k] for k in sorted(result)}
首先将字典合并为Counter
,然后将结果转换回dict
,然后再通过键sort the dict将其合并。
答案 3 :(得分:0)
您可以尝试添加两个字典。
from collections import Counter
def merged_dic():
dict1 = {'a': 10, 'b': 8, 'c':5}
dict2 = {'d': 6, 'c': 4, 'a':20}
a = Counter(dict1)
b = Counter(dict2)
c = a+b
print(dict(c))
merged_dic()
输出:-{'a':30,'b':8,'c':9,'d':6}