python - 字典通过更新合并,但如果值存在则不覆盖

标签 python dictionary merge compare

如果我有 2 个字典如下:

d1 = {'a': 2, 'b': 4}
d2 = {'a': 2, 'b': ''}

为了“合并”它们:

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

结果

{'a': 2, 'b': ''}

但是如果我想比较两个字典的每个值并且只更新 d2d1 如果值在 d1 我该怎么办> 为空/None/''?

当存在相同的键时,我只想保留数值(来自 d1d2)而不是空值。如果两个值都为空,则保持空值没有问题。如果两者都有值,那么 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/

相关文章:

实例化时带有 datetime.now() 的 Python 类

python 嵌套 dict 到 csv 有很多列

r - 线性回归中的残差是否遵循原始数据框行的相同顺序?

python - FastAPI - 模拟路径功能没有效果

python - 在python中声明空类成员

python - 单元测试调用 vim 子进程的 python 函数

python - 如何重新排列字典键的顺序?

python - 扁平化python中每个键的值

c# - TFS [merge] 标记在合并代码审查中的含义

python - 合并 Pandas 中的公共(public)列值会产生不正确的数据框