【问题标题】:Given key value pairs, sort output alphabetically and increment values给定键值对,按字母顺序对输出进行排序并递增值
【发布时间】:2019-08-13 00:34:19
【问题描述】:
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)

【问题讨论】:

  • 为什么要合并字典?相同键的值将丢失。

标签: python


【解决方案1】:

如果值是数字,您可以使用计数器:

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

【讨论】:

  • 然而,这些不会按照 OP 的要求对输出键进行排序。
  • @blhsing 我不认为这是一个非常重要的要求,但我还是编辑了。
【解决方案2】:

您可以使用 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}

【讨论】:

    【解决方案3】:
    result = dict(Counter(dict1) + Counter(dict2))
    result = {k: result[k] for k in sorted(result)}     
    

    首先将字典合并在一起,将它们转换为Counters,然后将结果转换回dict,然后通过键将其转换为sort the dict

    【讨论】:

      【解决方案4】:

      您可以尝试收藏以添加两个字典..

      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}

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 2019-11-22
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多