Add values from two dictionaries

前端 未结 5 916
萌比男神i
萌比男神i 2021-01-02 08:07
dict1 = {a: 5, b: 7}
dict2 = {a: 3, c: 1}

result {a:8, b:7, c:1}

How can I get the result?

相关标签:
5条回答
  • 2021-01-02 08:18

    You can use collections.Counter which implements addition + that way:

    >>> from collections import Counter
    >>> dict1 = Counter({'a': 5, 'b': 7})
    >>> dict2 = Counter({'a': 3, 'c': 1})
    >>> dict1 + dict2
    Counter({'a': 8, 'b': 7, 'c': 1})
    

    if you really want the result as dict you can cast it back afterwards:

    >>> dict(dict1 + dict2)
    {'a': 8, 'b': 7, 'c': 1}
    
    0 讨论(0)
  • 2021-01-02 08:23

    A quick dictionary comprehension that should work on any classes which accept the + operator. Performance might not be optimal.

    {
        **dict1,
        **{ k:(dict1[k]+v if k in dict1 else v)
            for k,v in dict2.items() }
    }
    
    0 讨论(0)
  • 2021-01-02 08:24

    this is a one-liner that would do just that:

    dict1 = {'a': 5, 'b': 7}
    dict2 = {'a': 3, 'c': 1}
    
    result = {key: dict1.get(key, 0) + dict2.get(key, 0)
              for key in set(dict1) | set(dict2)}
    # {'c': 1, 'b': 7, 'a': 8}
    

    note that set(dict1) | set(dict2) is the set of the keys of both your dictionaries. and dict1.get(key, 0) returns dict1[key] if the key exists, 0 otherwise.

    0 讨论(0)
  • 2021-01-02 08:38

    Here is a nice function for you:

    def merge_dictionaries(dict1, dict2):
        merged_dictionary = {}
    
        for key in dict1:
            if key in dict2:
                new_value = dict1[key] + dict2[key]
            else:
                new_value = dict1[key]
    
            merged_dictionary[key] = new_value
    
        for key in dict2:
            if key not in merged_dictionary:
                merged_dictionary[key] = dict2[key]
    
        return merged_dictionary
    

    by writing:

    dict1 = {'a': 5, 'b': 7}
    dict2 = {'a': 3, 'c': 1}
    result = merge_dictionaries(dict1, dict2)
    

    result will be:

    {'a': 8, 'b': 7, 'c': 1}
    
    0 讨论(0)
  • 2021-01-02 08:44
    Here is another approach but it is quite lengthy!
    
    d1 = {'a': 5, 'b': 7}
    d2 = {'a': 3, 'c': 1}
    
    d={}
    for i,j in d1.items():
        for k,l in d2.items():
            if i==k:
                c={i:j+l}
                d.update(c)
    for i,j in d1.items():
        if i not in d:
            d.update({i:j})
    for m,n in d2.items():
        if m not in d:
            d.update({m:n})
    
    0 讨论(0)
提交回复
热议问题