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

treelib展示节点字典数据遇AttributeError,如何正确显示?

解决treelib展示字典类型节点数据的AttributeError问题

问题原因

treelib的show()方法中,data_property参数默认通过属性访问(getattr()函数)读取节点数据,但你传入的节点数据是字典类型,字典只能通过键索引(如dict["name"])获取值,无法用属性形式(dict.name)访问,因此报错。


方法一:将字典数据转为类实例

把字典换成支持属性访问的类对象,比如用dataclass快速定义简单类:

from treelib import Tree, Node
from dataclasses import dataclass

@dataclass
class Person:
    name: str

# 创建树形结构
tree = Tree()
tree.create_node(tag="Root", identifier="root", data=Person(name="Alice"))
tree.create_node(tag="Child 1", parent="root", data=Person(name="Mark"))
tree.create_node(tag="Child 2", parent="root", data=Person(name="Bob"))

# 正常使用data_property展示name属性
tree.show(data_property="name")

方法二:自定义节点显示函数

如果不想修改现有数据结构,直接通过node_display参数传入自定义函数,从字典中提取目标值:

from treelib import Tree, Node

# 创建带字典数据的树形结构
tree = Tree()
tree.create_node(tag="Root", identifier="root", data={"name": "Alice"})
tree.create_node(tag="Child 1", parent="root", data={"name": "Mark"})
tree.create_node(tag="Child 2", parent="root", data={"name": "Bob"})

# 自定义显示逻辑:优先取字典中的name值,否则用节点tag
def custom_node_display(node):
    if isinstance(node.data, dict) and "name" in node.data:
        return node.data["name"]
    return node.tag

# 调用show时传入自定义函数
tree.show(node_display=custom_node_display)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:12:07