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

Python 如何将邻接表字典列表转为仅含name、children的嵌套字典

适配目标结构的函数修改方案

直接保留原函数通过id和parent_id关联层级的核心逻辑就行,只需要调整字段组装的细节,不需要额外递归遍历删冗余字段,哪怕是1000条节点的规模,运行开销也很低。

可直接运行的修改后函数

def list_to_tree(data):
    # 初始化节点映射表,提前预置根节点(对应parent_id=0的顶层节点)
    node_map = {
        0: {'name': 'rootnode', 'children': []}
    }
    # 第一遍遍历:按id初始化每个节点的结构,从源头排除id、parent_id这类冗余字段
    for item in data:
        node_map[item['id']] = {
            'name': item['name'],
            'children': []
        }
    # 第二遍遍历:把每个节点挂载到对应父节点的children列表下
    for item in data:
        # 加个简单判断避免脏数据(孤立节点的parent_id无匹配值)触发KeyError
        if item['parent_id'] not in node_map:
            continue
        node_map[item['parent_id']]['children'].append(node_map[item['id']])
    # 直接返回根节点,输出结构完全符合要求
    return node_map[0]

相比你原有实现的优化点

  • 从节点初始化阶段就只保留name字段,不会把id、parent_id存到最终结构里,省掉搭完树再递归遍历删冗余字段的步骤。
  • 子节点列表的键名直接用要求的children,不需要后续做全局键名替换。
  • 根节点的名称直接预置为指定的rootnode,和目标输出的根节点格式完全对齐。
  • 加了基础的异常兜底,遇到原列表里的无效孤立节点时不会直接崩溃。

拿你给出的前10条节点数据测试,输出结构就和要求的完全一致:所有多层嵌套的节点只会保留name和对应的children列表,没有多余的id相关字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 17:54:07