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

Python如何移除动态嵌套字典上层层级 转为非嵌套扁平化结构

问题原因分析

你原有代码的核心问题是:处理嵌套子字典时直接修改了当前循环的nested_dict变量,导致当前层级后续的键不会被遍历,比如同层级存在多个子字典时,只有第一个子字典会被处理,剩余的子字典全部被跳过。

纯Python原生递归实现(无需第三方库)

不需要提前知道嵌套深度,可适配任意动态结构的嵌套字典,逻辑简单稳定:

def flatten_dict(nested_dict):
    res = {}
    if isinstance(nested_dict, dict):
        for k, v in nested_dict.items():
            if isinstance(v, dict):
                # 递归处理子字典,合并结果到当前返回值
                res.update(flatten_dict(v))
            else:
                # 非字典类型直接存入结果
                res[k] = v
    return res

# 调用示例
output = flatten_dict(nested_dict)

该实现完全符合你的需求,会自动丢弃所有上层父键,仅保留叶子节点的键值对。如果不同层级出现同名叶子键,后遍历到的键值会覆盖先遍历到的,这是Python字典的原生特性,若需要保留所有同名键,可修改返回结构为列表存储键值对,或给同名键加序号区分。

第三方库实现方案

方法1:使用flatten-dict库

专门用于字典扁平化的专用库,适配性更强:

  1. 安装命令:pip install flatten-dict
  2. 使用代码:
from flatten_dict import flatten

# reducer参数指定只保留最底层的叶子键
flat_dict = flatten(nested_dict, reducer=lambda _, k2: k2)

方法2:使用Pandas实现

如果你已经在使用Pandas做数据处理,可以用json_normalize间接实现,无需额外安装其他库:

import pandas as pd

# 先把嵌套字典转成扁平化的DataFrame,列名为全路径拼接
df = pd.json_normalize(nested_dict)
# 取每个列名的最后一段作为最终键
flat_dict = {k.split('.')[-1]: v for k, v in df.to_dict('records')[0].items()}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:27:04