You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并同结构字典:仅用非None值替换目标字典对应键值

字典合并:用dict1的非None值更新dict2

要实现仅当dict1中键对应的值不为None时,才用该值替换dict2的对应值,有两种简洁高效的实现方式:

方法1:字典推导式

直接遍历dict2的所有键,根据dict1对应值是否为None选择最终值,一步生成结果字典:

# 测试案例1
dict1 = {"a": 0.0, "b": None}
dict2 = {"a": None, "b": 2.2}
result = {key: dict1[key] if dict1.get(key) is not None else dict2[key] for key in dict2}
print(result)  # 输出: {'a': 0.0, 'b': 2.2}

# 测试案例2
dict1 = {"a": 0.0, "b": 5.5}
dict2 = {"a": None, "b": 2.2}
result = {key: dict1[key] if dict1.get(key) is not None else dict2[key] for key in dict2}
print(result)  # 输出: {'a': 0.0, 'b': 5.5}

方法2:复制dict2后过滤更新

先复制dict2避免修改原字典,再过滤出dict1中值不为None的键值对,用这些键值对更新复制后的字典:

# 测试案例1
dict1 = {"a": 0.0, "b": None}
dict2 = {"a": None, "b": 2.2}

result = dict2.copy()
filtered_dict1 = {k: v for k, v in dict1.items() if v is not None}
result.update(filtered_dict1)
print(result)  # 输出: {'a': 0.0, 'b': 2.2}

# 测试案例2
dict1 = {"a": 0.0, "b": 5.5}
dict2 = {"a": None, "b": 2.2}

result = dict2.copy()
filtered_dict1 = {k: v for k, v in dict1.items() if v is not None}
result.update(filtered_dict1)
print(result)  # 输出: {'a': 0.0, 'b': 5.5}

两种方法的适用场景

  • 字典推导式写法紧凑,适合直接生成结果的场景;
  • 复制更新的方式逻辑清晰,便于后续扩展(比如添加额外过滤条件),同时能保证原dict2不被修改。

内容的提问来源于stack exchange,提问作者user17443811

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:03:22