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

如何将嵌套字典拆分为由单键路径构成的列表

实现思路

递归DFS是处理这类嵌套结构拆解需求的最优常规方案,逻辑清晰、代码冗余度低,不需要手动维护复杂的路径状态,递归调用栈会自动记录层级关系。
核心逻辑只有两步:

  • 遍历当前层级字典的所有键值对,若值为非字典类型(即叶子节点),直接构造单键字典加入结果集
  • 若值为字典类型,递归拆解该子字典,将返回的每个子拆解结果外层包裹当前键,再加入结果集

递归实现代码

def split_nested_dict(nested_data: dict) -> list:
    res = []
    for k, v in nested_data.items():
        if not isinstance(v, dict):
            res.append({k: v})
        else:
            # 递归处理子字典,嵌套当前键层
            for sub_res in split_nested_dict(v):
                res.append({k: sub_res})
    return res

样例验证

传入你提供的输入(已补全原字典缺失的语法逗号):

test_dict = {
    "a": {"b": 1,
          "c": 2,
          "d": {"e": 3,
                "f": 4}
          },
    "g": {"h": 5,
          "i": 6}
}

print(split_nested_dict(test_dict))

输出和预期完全匹配:

[
    {'a': {'b': 1}},
    {'a': {'c': 2}},
    {'a': {'d': {'e': 3}}},
    {'a': {'d': {'f': 4}}},
    {'g': {'h': 5}},
    {'g': {'i': 6}}
]

特殊场景可选:迭代版实现

如果你的场景存在超深嵌套(超过Python默认递归深度限制1000层),可以用手动维护栈的迭代版本实现,逻辑和递归完全等价,不会触发栈溢出:

def split_nested_dict_iter(nested_data: dict) -> list:
    res = []
    # 栈元素格式:(当前处理的字典, 外层已构造的嵌套前缀)
    stack = [(nested_data, None)]
    
    while stack:
        current_dict, prefix = stack.pop()
        for k, v in current_dict.items():
            current_node = {k: v}
            # 拼接外层前缀
            if prefix:
                import copy
                tmp = copy.deepcopy(prefix)
                cursor = tmp
                # 定位到前缀最内层位置挂载当前节点
                while isinstance(list(cursor.values())[0], dict):
                    cursor = list(cursor.values())[0]
                cursor[list(cursor.keys())[0]] = current_node
                current_node = tmp
            
            if not isinstance(v, dict):
                res.append(current_node)
            else:
                stack.append((v, current_node))
    # 栈为后进先出,反转后保持和递归版一致的顺序
    return res[::-1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:21:08