Is there any pythonic way to combine two dicts (adding values for keys that appear in both)? Is there any pythonic way to combine two dicts (adding values for keys that appear in both)? python python

# Is there any pythonic way to combine two dicts (adding values for keys that appear in both)?

``>>> from collections import Counter>>> A = Counter({'a':1, 'b':2, 'c':3})>>> B = Counter({'b':3, 'c':4, 'd':5})>>> A + BCounter({'c': 7, 'b': 5, 'd': 5, 'a': 1})``

Counters are basically a subclass of `dict`, so you can still do everything else with them you'd normally do with that type, such as iterate over their keys and values.

A more generic solution, which works for non-numeric values as well:

``a = {'a': 'foo', 'b':'bar', 'c': 'baz'}b = {'a': 'spam', 'c':'ham', 'x': 'blah'}r = dict(a.items() + b.items() +    [(k, a[k] + b[k]) for k in set(b) & set(a)])``

or even more generic:

``def combine_dicts(a, b, op=operator.add):    return dict(a.items() + b.items() +        [(k, op(a[k], b[k])) for k in set(b) & set(a)])``

For example:

``>>> a = {'a': 2, 'b':3, 'c':4}>>> b = {'a': 5, 'c':6, 'x':7}>>> import operator>>> print combine_dicts(a, b, operator.mul){'a': 10, 'x': 7, 'c': 24, 'b': 3}``

``>>> A = {'a':1, 'b':2, 'c':3}>>> B = {'b':3, 'c':4, 'd':5}>>> c = {x: A.get(x, 0) + B.get(x, 0) for x in set(A).union(B)}>>> print(c){'a': 1, 'c': 7, 'b': 5, 'd': 5}``