Python: Dictionary merge by updating but not overwriting if value exists Python: Dictionary merge by updating but not overwriting if value exists python python

Python: Dictionary merge by updating but not overwriting if value exists


Just switch the order:

z = dict(d2.items() + d1.items())

By the way, you may also be interested in the potentially faster update method.

In Python 3, you have to cast the view objects to lists first:

z = dict(list(d2.items()) + list(d1.items())) 

If you want to special-case empty strings, you can do the following:

def mergeDictsOverwriteEmpty(d1, d2):    res = d2.copy()    for k,v in d2.items():        if k not in d1 or d1[k] == '':            res[k] = v    return res


Python 2.7. Updates d2 with d1 key/value pairs, but only if d1 value is not None,'' (False):

>>> d1 = dict(a=1,b=None,c=2)>>> d2 = dict(a=None,b=2,c=1)>>> d2.update({k:v for k,v in d1.iteritems() if v})>>> d2{'a': 1, 'c': 2, 'b': 2}


To add to d2 keys/values from d1 which do not exist in d2 without overwriting any existing keys/values in d2:

temp = d2.copy()d2.update(d1)d2.update(temp)