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

Python扁平化嵌套JSON如何仅保留带父级前缀的嵌套键

代码修改方案

问题原因

原代码递归处理嵌套字典时,内层子键(比如示例里的Name)会在内层递归的else分支被单独加入fields列表,导致输出了不需要的无父级前缀的子键。

修改后的代码

你可以直接用下面的版本,同时支持自定义拼接符,示例里用下划线_和你给出的输出格式匹配,如果需要点分隔修改拼接符号即可:

def flatten_dict(d, parent_key='', sep='_'):
    fields = []
    items = []
    for k, v in d.items():
        new_key = f"{parent_key}{sep}{k}" if parent_key else k
        if isinstance(v, dict):
            # 递归处理嵌套字典,拿到拼接后的嵌套键
            nested_fields, nested_items = flatten_dict(v, new_key, sep=sep)
            fields.extend(nested_fields)
            items.extend(nested_items)
        else:
            # 仅把完整拼接后的键加入结果列表,不会单独收集内层子键
            fields.append(new_key)
            items.append((new_key, v))
    return fields, dict(items)

# 调用测试
test_json = {"Field1":"a","Field2":"b","Field3":"c","AdditionalInfo":{"Name":"foo"}}
fields, flatten_result = flatten_dict(test_json)
print(tuple(fields)) 
# 输出:('Field1', 'Field2', 'Field3', 'AdditionalInfo_Name')

修改点说明

  • 移除了全局变量fields的使用,改为函数直接返回结果列表,避免全局变量污染
  • 新增父级键拼接逻辑,所有加入结果列表的键都是经过父级前缀拼接后的完整键,从根源上避免收集到无前缀的内层子键
  • 支持自定义分隔符,修改sep参数即可切换.、_等不同的拼接格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 08:27:03