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

Python递归遍历嵌套字典全分支扁平化输出问题排查

问题分析与修复方案

核心问题

你的代码存在两个明显问题:

  • 路径回溯不完整:key_lst是可变对象,函数调用时传的是引用,你仅在输出末端值的else分支中弹出当前key,而处理完非空字典的递归逻辑后,没有弹出当前层级的key,导致前面分支的key一直残留在路径列表中,出现路径累加的错误。
  • 空字典处理不符合预期:空字典属于不需要继续递归的末端值,你的代码直接输出str({}),但预期要求空字典对应输出空值。

修改后代码

def parse_dict(dict1, key_lst):
    for key, val in dict1.items():
        key_lst.append(key)
        if isinstance(val, dict):
            if len(val) > 0:
                parse_dict(val, key_lst)
            else:
                # 空字典输出空值
                print('|'.join(map(str, key_lst)) + '|')
        else:
            # 其他末端类型(字符串、数值、列表)直接输出
            print('|'.join(map(str, key_lst)) + '|' + str(val))
        # 无论是否递归,处理完当前key都弹出,保证路径回溯正确
        key_lst.pop()

key_lst = []
parse_dict(dict1, key_lst)

逻辑说明

  1. 所有分支处理完成后统一执行key_lst.pop(),保证每遍历完一个key,就把它从当前路径中移除,回到父层级时路径列表不会残留子层级的key。
  2. 单独判断空字典的情况,输出时不拼接{},改为拼接空字符串,符合预期输出要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:03