Add values from two dictionaries Add values from two dictionaries python-3.x python-3.x

Add values from two dictionaries


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.


this works on a more recent python version:

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


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 + dict2Counter({'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}


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}