仅持有最终层键值对时如何填充Python嵌套字典
实现方法
核心思路是递归遍历嵌套字典的所有层级,遇到叶子节点键时,直接从扁平字典中取出对应值替换即可,不需要硬编码固定的字典层级,可适配任意嵌套深度的场景。
实现代码
def fill_nested_dict(nested_dict: dict, flat_kv: dict) -> dict: for key, val in nested_dict.items(): # 当前值是字典时,递归进入下一层遍历 if isinstance(val, dict): fill_nested_dict(val, flat_kv) # 当前键存在于扁平映射中时,替换为对应值 elif key in flat_kv: nested_dict[key] = flat_kv[key] return nested_dict
使用方式
如果不需要保留原始嵌套字典的内容,可以直接传入原字典调用:
dict_out = fill_nested_dict(dict1, dict2)
如果不想修改原始dict1的数据,先做深拷贝再传入即可:
import copy dict1_clone = copy.deepcopy(dict1) dict_out = fill_nested_dict(dict1_clone, dict2)
注意事项
- 你给出的示例代码存在Python语法错误:字典的元素必须是
键:值格式,你写的{layer2: {layer3: {a:None, b:None, c:None}}, {d:None, e:None}}中,第二个花括号包裹的{d:None, e:None}没有对应的键,运行时会被识别为集合元素而非字典结构,递归逻辑无法遍历到d、e两个键,实际使用时需要补全这部分的结构,比如将d/e所在字典作为layer2下和layer3平级的键对应值,才能得到你期望的输出。 - 该实现对键重名的场景默认取最深层的匹配值,如果存在多层同名键需要特殊处理,可以在递归时追加路径参数做精确匹配。
内容的提问来源于stack exchange,提问作者t.pellegrom
相关产品推荐
相关产品推荐

