Dictionary Merge and Update Operators in Python 3.9#
When it comes to merging two dictinaries in Python, I find myself googling “how to merge two dictionaries” very often. Every time I land on this StackOverflow answer. This answers recommends using the dictionary unpacking feature:
x = {'earth': 5.97, 'mercury': 0.330}
y = {'uranus': 86.8, 'mars': 0.642, 'earth': -999}
a = {**x, **y}
a
{'earth': -999, 'mercury': 0.33, 'uranus': 86.8, 'mars': 0.642}
Even though I have seen dictionary unpacking used for unpacking keyword arguments in functions, I’ve rarely seen it being used as a method for merging dictionaries, and this makes it a bit confusing if you haven’t seen it used in this context. I was delighted when I found out that Python 3.9 introduced a dedicated binary operator that permits merging two dictionaries. In Python 3.9, we can use the |
(bitwise OR
) to perform a dictionary merge:
b = x | y
b
{'earth': -999, 'mercury': 0.33, 'uranus': 86.8, 'mars': 0.642}
As you can see, the resulting dictionary consists of a new dictionary with all the keys of both x
and y
dictionaries. Because x
and y
have overlapping key earth
, the new dictionary uses the values from the rightmost dictionary (i.e. y
)
If we prefer to update one of the dictionary inplace (i.e. without needing to create a new dictionary), we can use the |=
(in-place bitwise OR
) operator
x |= y
x
{'earth': -999, 'mercury': 0.33, 'uranus': 86.8, 'mars': 0.642}
I really dig this new |
operator. I find the syntax easy to remember and understand compared with the dictionary unpacking feature that I used prior to Python 3.9. There’s one problem though. This operator is only available for Python 3.9+ and I have to write code for older versions of Python for the time being 😞.