如果我有 2 个字典如下:
d1 = {'a': 2, 'b': 4}
d2 = {'a': 2, 'b': ''}
为了“合并”它们:
dict(d1.items() + d2.items())
结果
{'a': 2, 'b': ''}
但是如果我想比较两个字典的每个值并且只更新 d2
到 d1
如果值在 d1
我该怎么办> 为空/None
/''
?
当存在相同的键时,我只想保留数值(来自 d1
或 d2
)而不是空值。如果两个值都为空,则保持空值没有问题。如果两者都有值,那么 d1
-value 应该保留。
即
d1 = {'a': 2, 'b': 8, 'c': ''}
d2 = {'a': 2, 'b': '', 'c': ''}
应该会导致
{'a': 2, 'b': 8, 'c': ''}
其中 8 未被 ''
覆盖。
最佳答案
只需切换顺序:
z = dict(d2.items() + d1.items())
顺便说一下,您可能还对可能更快的 update
感兴趣方法。
在 Python 3 中,您必须先将 View 对象转换为列表:
z = dict(list(d2.items()) + list(d1.items()))
如果要对空字符串进行特殊处理,可以执行以下操作:
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 - 字典通过更新合并,但如果值存在则不覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354436/