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()