d3 = dict(d1, **d2)
I understand that this merges the dictionary. But, is it unique? What if d1 has the same key as d2 but different value? I would like d1 and d2 to be merged, but d1 has priority if there is duplicate key.
Using | in Python 3.9 In the latest update of python now we can use “|” operator to merge two dictionaries. It is a very convenient method to merge dictionaries.
Dictionary is also iterable, so we can use itertools. chain() to merge two dictionaries. The return type will be itertools.
To merge multiple dictionaries, the most Pythonic way is to use dictionary comprehension {k:v for x in l for k,v in x. items()} to first iterate over all dictionaries in the list l and then iterate over all (key, value) pairs in each dictionary.
You can use the .update()
method if you don't need the original d2
any more:
Update the dictionary with the key/value pairs from other, overwriting existing keys. Return
None
.
E.g.:
>>> d1 = {'a': 1, 'b': 2} >>> d2 = {'b': 1, 'c': 3} >>> d2.update(d1) >>> d2 {'a': 1, 'c': 3, 'b': 2}
Update:
Of course you can copy the dictionary first in order to create a new merged one. This might or might not be necessary. In case you have compound objects (objects that contain other objects, like lists or class instances) in your dictionary, copy.deepcopy
should also be considered.
In Python2,
d1={'a':1,'b':2} d2={'a':10,'c':3}
d1 overrides d2:
dict(d2,**d1) # {'a': 1, 'c': 3, 'b': 2}
d2 overrides d1:
dict(d1,**d2) # {'a': 10, 'c': 3, 'b': 2}
This behavior is not just a fluke of implementation; it is guaranteed in the documentation:
If a key is specified both in the positional argument and as a keyword argument, the value associated with the keyword is retained in the dictionary.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With