In [1]:
a = {'a': 5, 'b': 1, 'c': -1, 'd': 1}
b = {'a': 1, 'b': 5, 'c': 1, 'e': 1}
In [2]:
def solution1(a, b):
result = dict(a)
for k, v in b.items():
if result.get(k):
result[k] += v
else:
result[k] = v
return result
solution1(a, b)
Out[2]:
In [3]:
def solution2(a, b):
result = dict(a)
for k, v in b.items():
try:
result[k] += v
except KeyError:
result[k] = v
return result
solution2(a, b)
Out[3]:
In [4]:
from collections import Counter
def solution3(a, b):
return Counter(a) + Counter(b)
solution3(a, b)
Out[4]:
In [5]:
def solution4(a, b):
intersection = set(a) & set(b)
c = {k: a[k] + b[k] for k in intersection}
return {**a, **b, **c}
solution4(a, b)
Out[5]:
In [6]:
solution5 = lambda a, b: {**a, **b, **{k: a[k] + b[k] for k in a.keys() & b}}
solution5(a, b)
Out[6]:
In [14]:
%timeit -n 100000 solution1(a, b)
In [15]:
%timeit -n 100000 solution2(a, b)
In [16]:
%timeit -n 100000 solution3(a, b)
In [17]:
%timeit -n 100000 solution4(a, b)
In [18]:
%timeit -n 100000 solution5(a, b)
In [ ]: