给定键值对,请按字母顺序对输出进行排序并递增值

时间:2019-03-22 03:41:25

标签: python

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)

4 个答案:

答案 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}