Python 给定键值对,按字母顺序和增量值对输出进行排序

Python 给定键值对,按字母顺序和增量值对输出进行排序,python,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 = {'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)
这对于两个字典来说可能有点过分,因此另一个选项是:

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}
它将dict1更新到位

最后,如果您确实需要结果排序python3.7+,请使用

for k, v in dict2.items():
    dict1[k] = dict1.setdefault(k, 0) + v

dict1
# {'a': 30, 'b': 8, 'c': 9, 'd': 6}

您可以使用dict理解,该理解迭代两个dict键的排序并集,并输出两个dict各自值与给定键之和的值,默认值为0:

result = {k : dict1[k] for k in sorted(dict1)}
这将返回:

{k: dict1.get(k, 0) + dict2.get(k, 0) for k in sorted(dict1.keys() | dict2.keys())}

首先将dict转换为s并将结果转换回dict,然后按键将dict合并在一起。

您可以尝试使用集合来添加两个dictionary

result = dict(Counter(dict1) + Counter(dict2))
result = {k: result[k] for k in sorted(result)}     

输出:-{'a':30,'b':8,'c':9,'d':6}

为什么要合并词典?同一个键的值将丢失。但是,这些键不会按照OP的要求对输出键进行排序。@blhsing我认为这不是一个非常重要的要求,但我已经编辑过了。
result = dict(Counter(dict1) + Counter(dict2))
result = {k: result[k] for k in sorted(result)}     
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()