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

如何用嵌套字典表示属性层级?修复Python递归构建字典问题

解决属性层级递归构建嵌套字典的问题

问题根源

你的代码存在三个核心问题:

  1. 递归逻辑错误:add函数每次递归都会从头遍历所有行,且最终返回空字典,导致子节点被覆盖为空;同时修改传入的dct时逻辑混乱,父节点的子节点被重复赋值。
  2. CSV分隔符不匹配:你的CSV文件用空格分隔,但代码中指定了delimiter=";",导致读取的数据格式错误。
  3. 外层循环重复操作:遍历每行时都调用add,重复覆盖父节点的内容,破坏已构建的结构。

修正方案

先将CSV数据预处理为父节点到子节点列表的映射,再通过递归构建嵌套字典,逻辑更清晰且避免重复遍历:

import csv

def build_hierarchy(node, parent_child_map):
    # 递归构建当前节点的子层级
    hierarchy = {}
    # 如果当前节点有子节点,递归处理每个子节点
    if node in parent_child_map:
        for child in parent_child_map[node]:
            hierarchy[child] = build_hierarchy(child, parent_child_map)
    return hierarchy

with open('hierarchy.csv', 'r', encoding='utf-8-sig') as hfile:
    # 适配CSV的空格分隔格式,skipinitialspace避免空格干扰
    reader = csv.reader(hfile, delimiter=" ", skipinitialspace=True)
    parent_child_map = {}
    
    # 预处理数据:构建父节点到子节点的映射
    for row in reader:
        parent, child = row[0], row[1]
        if child == '(none)':
            continue  # 忽略无子女的节点标记
        # 将子节点添加到父节点的列表中
        if parent not in parent_child_map:
            parent_child_map[parent] = []
        parent_child_map[parent].append(child)
    
    # 找出所有根节点(没有父节点的节点)
    all_nodes = set(parent_child_map.keys())
    all_nodes.update([child for children in parent_child_map.values() for child in children])
    root_nodes = [node for node in all_nodes if node not in [child for children in parent_child_map.values() for child in children]]
    
    # 构建最终层级字典
    final_hierarchy = {}
    for root in root_nodes:
        final_hierarchy[root] = build_hierarchy(root, parent_child_map)

print(final_hierarchy)

代码说明

  1. 数据预处理:遍历CSV,把每个父节点对应的子节点整理成列表,存储在parent_child_map中,方便后续递归查找。
  2. 递归构建:build_hierarchy函数接收当前节点和映射表,递归生成每个子节点的层级结构,返回嵌套字典。
  3. 根节点识别:找出所有没有父节点的根节点(比如physical、abstract、pn),作为层级的顶层节点。

输出结果

运行后会得到符合你期望的嵌套结构:

{
    'physical': {
        'edible': {},
        'alive': {'people': {}},
        'clothing': {},
        'container': {
            'transport': {'car': {}},
            'crossable': {}
        }
    },
    'abstract': {},
    'pn': {}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:18