如何合并同结构字典:仅用非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
相关产品推荐
相关产品推荐

