字典通过更新合并,但如果值存在则不覆盖
问题描述
If I have 2 dicts as follows:
d1 = {'a': 2, 'b': 4}
d2 = {'a': 2, 'b': ''}
In order to 'merge' them:
dict(d1.items() + d2.items())
results in
{'a': 2, 'b': ''}
But what should I do if I would like to compare each value of the two dictionaries and only update d2
into d1
if values in d1
are empty/None
/''
?
When the same key exists, I would like to only maintain the numerical value (either from d1
or d2
) instead of the empty value. If both values are empty, then no problems maintaining the empty value. If both have values, then d1
-value should stay.
i.e.
d1 = {'a': 2, 'b': 8, 'c': ''}
d2 = {'a': 2, 'b': '', 'c': ''}
should result in
{'a': 2, 'b': 8, 'c': ''}
where 8 is not overwritten by ''
.
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
相关文章