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)
逻辑说明
- 所有分支处理完成后统一执行
key_lst.pop(),保证每遍历完一个key,就把它从当前路径中移除,回到父层级时路径列表不会残留子层级的key。 - 单独判断空字典的情况,输出时不拼接
{},改为拼接空字符串,符合预期输出要求。
内容的提问来源于stack exchange,提问作者dig_123
相关产品推荐
相关产品推荐

