You need to enable JavaScript to run this app. Python3如何通用遍历任意深度嵌套字典修改值并生成新字典
优惠活动
大模型
产品
解决方案
定价
更多

Python3如何通用遍历任意深度嵌套字典修改值并生成新字典

通用嵌套字典遍历与修改实现方案

核心思路

放弃固定层数的硬编码循环逻辑,采用递归方式逐节点遍历任意深度的嵌套结构,遍历过程中记录当前节点的层级路径,灵活匹配目标值并执行自定义修改,最终生成完全独立的全新修改后字典,不改动原输入对象。

递归处理的核心逻辑

  • 遍历过程中自动识别当前节点的结构类型,支持字典、列表等常见嵌套容器,不需要提前预设层级数量
  • 全程记录当前节点的父级键集合,用来判断该值是否属于指定的业务层级(比如需求中的Grade2层级)
  • 对基础类型的值(数值、字符串等)执行预设的匹配判断,符合规则就返回修改后的值,不符合则返回原值
  • 所有递归返回的结果都是新建的容器对象,不会保留原字典的引用,保证修改后的字典完全独立

原硬编码4层循环的局限性:只能适配完全固定的嵌套层数和结构,只要层级加深、或者某层插入了列表/其他容器类型,循环逻辑就会直接失效,甚至触发键不存在的错误。

可直接复用的代码实现

def traverse_and_modify(input_obj, parent_keys=None):
    # 初始化父级键集合,记录当前节点所处的层级路径
    if parent_keys is None:
        parent_keys = set()

    # 处理字典结构:新建空字典逐键递归
    if isinstance(input_obj, dict):
        new_dict = {}
        for key, value in input_obj.items():
            # 将当前键加入路径集合,递归处理子值
            updated_parent_keys = parent_keys.copy()
            updated_parent_keys.add(key)
            new_dict[key] = traverse_and_modify(value, updated_parent_keys)
        return new_dict

    # 处理列表结构:新建空列表逐元素递归
    elif isinstance(input_obj, list):
        new_list = []
        for item in input_obj:
            new_list.append(traverse_and_modify(item, parent_keys))
        return new_list

    # 处理基础类型值:执行规则匹配和修改
    else:
        # 自定义匹配规则:处于Grade2层级下、数值类型、值低于90
        if 'Grade2' in parent_keys and isinstance(input_obj, (int, float)) and input_obj < 90:
            # 自定义修改规则:统一调整为90
            return 90
        # 不符合规则则返回原值
        return input_obj

调用方式

直接传入原成绩表对象即可生成独立的修改后字典:

updated_markssheet = traverse_and_modify(markssheet)

灵活适配不同需求的调整方法

不需要改动核心遍历逻辑,只需要修改基础值判断部分的规则即可适配其他场景:

  • 如果需要匹配指定学科的成绩,比如要修改所有低于90的数学成绩,只需将匹配规则的判断条件替换为'Math' in parent_keys and isinstance(input_obj, (int, float)) and input_obj < 90
  • 如果需要调整的目标不是所有Grade2的成绩,而是Grade2下3班的成绩,只需在匹配规则中增加对应班级的键判断即可
  • 支持任意深度的嵌套结构,哪怕嵌套层级加深到10层以上,只要结构是字典/列表嵌套,都能正常遍历处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 02:15:10