【问题标题】:How can I merge multiple dictionaries and add the values of the same key? (Python) [duplicate]如何合并多个字典并添加同一个键的值? (Python)[重复]
【发布时间】:2021-04-30 15:43:16
【问题描述】:

假设我有以下字典:

dict1 = {'a': 10, 'b': 8, 'c':3}
dict2 = {'c': 4}
dict3 = {'e':9, 'a':3}

我正在尝试以某种方式合并它们,使新的(组合)字典包含所有键,并将同一键的所有值加在一起。例如,在这种情况下,我想要的输出如下所示:

dict = {'a': 13, 'b': 8, 'c':7, 'e':9}

看起来 update() 方法不起作用,因为某些值被覆盖了。我也尝试了 ChainMaps 并遇到了同样的问题。如何合并多个字典并添加相同键的值?非常感谢:)

【问题讨论】:

    标签: python dictionary merge


    【解决方案1】:

    这是一个字典理解,可以使用itertools.chain.from_iterable()sum() 实现此目的。在这里,我从所有三个字典中创建了一个 set 的键。然后我在 dictionary comprehension 中迭代这个集合,以获得每个 keyvalues 的总和。

    >>> from itertools import chain
    
    >>> dict1 = {'a': 10, 'b': 8, 'c':3}
    >>> dict2 = {'c': 4}
    >>> dict3 = {'e':9, 'a':3}
    
    >>> my_dicts = dict1, dict2, dict3
    
    >>> {k: sum(dd.get(k, 0) for dd in my_dicts) for k in set(chain.from_iterable(d.keys() for d in my_dicts))}
    {'a': 13, 'e': 9, 'b': 8, 'c': 7}
    

    【讨论】:

    • 非常感谢,这对您有很大帮助:)
    • @Zhengrong 如果这个答案对你有帮助,你也可以点击左边的向上箭头来投票。它将帮助我额外获得 10 点声望
    【解决方案2】:

    下面的代码应该可以解决问题:

    dict1 = {'a': 10, 'b': 8, 'c':3}
    dict2 = {'c': 4}
    dict3 = {'e':9, 'a':3}
    
    multiple_dict = [dict1, dict2, dict3]
    
    final_dict = {}
    
    for dict in multiple_dict:
        for key, value in dict.items():
            if key in final_dict:
                final_dict[key] += value
            else:
                final_dict[key] = value
    
    print(final_dict)
    

    【讨论】:

    • 谢谢!!这很有帮助:)
    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2019-09-18
    • 2019-04-27
    • 1970-01-01
    • 2015-02-05
    • 2023-03-28
    相关资源
    最近更新 更多