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

如何在Python中基于含父子关联的层级数据构建树结构

Python 层级关联数据集构建树结构实现方案

核心实现逻辑

整个过程不需要引入额外第三方库,原生Python即可实现,核心思路是用字典做索引避免嵌套循环查找,时间复杂度仅为O(n),完全适配大型数据集处理:

  • 第一步:构建所有节点的ID索引,为每个节点预初始化children字段存储子节点
  • 第二步:遍历所有节点,根据父ID匹配对应父节点,将自身加入父节点的子节点列表
  • 第三步:筛选无父节点(或父ID为预设根节点标识)的节点作为树根,得到完整树结构

可直接运行的代码示例

假设你的原始数据格式为列表,每个元素包含id(子节点编号)、parent_id(父节点编号)、name(节点名称)三个核心字段,从csv、数据库读取的数据可先整理为该格式:

# 示例原始数据,可替换为你的实际业务数据
raw_data = [
    {"id": 1, "parent_id": 0, "name": "汽车"},
    {"id": 2, "parent_id": 0, "name": "飞机"},
    {"id": 3, "parent_id": 1, "name": "动力系统"},
    {"id": 4, "parent_id": 1, "name": "车身系统"},
    {"id": 5, "parent_id": 3, "name": "发动机"},
    {"id": 6, "parent_id": 3, "name": "变速箱"},
    {"id": 7, "parent_id": 2, "name": "机翼"},
    {"id": 8, "parent_id": 2, "name": "机身"},
]

def build_tree(data, root_parent_id=0):
    # 构建ID到节点的映射字典,避免重复循环查找
    node_map = {}
    for item in data:
        # 复制原数据避免修改原始数据集,新增children字段存储子节点
        node_map[item["id"]] = {**item, "children": []}
    
    forest = []
    for item in data:
        node_id = item["id"]
        parent_id = item["parent_id"]
        current_node = node_map[node_id]
        
        if parent_id == root_parent_id:
            # 父ID为根节点标识,直接加入根节点列表
            forest.append(current_node)
        else:
            # 匹配到父节点后,将当前节点加入父节点的子列表
            if parent_id in node_map:
                node_map[parent_id]["children"].append(current_node)
    
    return forest

# 调用函数生成树结构
tree = build_tree(raw_data)

# 打印验证结果,可替换为你需要的输出格式(比如JSON、嵌套列表等)
import json
print(json.dumps(tree, ensure_ascii=False, indent=2))

扩展适配说明

  • 如果你的根节点标识不是0,调用build_tree时传入对应root_parent_id参数即可,比如根节点父ID为None就传root_parent_id=None
  • 如果你的数据字段名不是id/parent_id,修改代码中对应的字段名即可快速适配
  • 需要输出可视化树结构的话,可以递归遍历生成带缩进的文本格式,也可引入anytree等第三方库实现图形化输出
  • 处理百万级以上超大型数据集时,可提前对数据按parent_id排序,进一步降低运行时内存占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:04