Python Tip of the Day - Merging Dicts
Posted on Fri 03 August 2018 in Posts
So it's not uncommon to want to merge two dictionaries in Python into a single dict. Typically, you'd do this like so:
x = {"key1": "value1", "key2": "value2"}
y = {"key2": "valuefromy", "key3": "value3"}
x.update(y)
But this is problematic because you're modifying x
in place. Additionally it's
multiple lines, instead of a single line to combine the two. Wouldn't it be nice
if you could combine two dicts in a single line to produce a new dict with the
combination of the two?
Indeed it would, and as of Python 3.5 you can.
x = {"key1": "value1", "key2": "value2"}
y = {"key2": "valuefromy", "key3": "value3"}
print({**x, **y}) # prints {'key1': 'value1', 'key2': 'valuefromy', 'key3': 'value3'}
Nice little shorthand. It's worth noting as well that this is actually quite fast:
>>> timeit.timeit("{**x, **y}", setup='x = {"key1": "value1", "key2": "value2"}; y = {"key2": "valuefromy", "key3": "value3"}')
0.17988868800000546
>>> timeit.timeit("x.update(y)", setup='x = {"key1": "value1", "key2": "value2"}; y = {"key2": "valuefromy", "key3": "value3"}')
0.20185830300002294
Best of all worlds, it's short, fast, concise and side-effect free.