Home > OS >  Merge dictionaries to overwrite duplicate keys without overwriting duplicate and non-duplicate value
Merge dictionaries to overwrite duplicate keys without overwriting duplicate and non-duplicate value

Time:07-30

Input:

dict1 = {a: [xxx, zzz]}
dict2 = {a: [yyy, zzz]}

Desired output:

dict3 = {a: [xxx, zzz, yyy, zzz]}

I have tried:

dict3 = dict1 | dict2

and

dict3 = dict1.copy()
d3 |= d2

However, the merge | and update |= operators overwrites with the last seen dict as precedence, resulting in:

dict3 = {a: [yyy, zzz]}

CodePudding user response:

This is the desired result, as stated in the PEP 584,

Dict union will return a new dict consisting of the left operand merged with the right operand, each of which must be a dict (or an instance of a dict subclass). If a key appears in both operands, the last-seen value (i.e. that from the right-hand operand) wins

You may need to merge two dict by hands:

In [8]: dict1 = {'a': ['xxx', 'zzz']}
   ...: dict2 = {'a': ['yyy', 'zzz']}
   ...: for k, v in dict2.items():
   ...:     if k in dict1:
   ...:         dict1[k]  = v
   ...:

In [9]: print(dict1)
{'a': ['xxx', 'zzz', 'yyy', 'zzz']}
  • Related