使用 Treelib (Python) 遍历树数据结构
Posted
技术标签:
【中文标题】使用 Treelib (Python) 遍历树数据结构【英文标题】:Iterating through tree datastructure using Treelib (Python) 【发布时间】:2022-01-22 21:21:38 【问题描述】:我通过 Node 类创建了一些节点,并使用 Treelib 将它们添加到树中。
class Node(object):
def __init__(self, id, label, parent, type):
self.id = id
self.label = label
self.parent = parent
self.type = type
node = Node(id, label, parent, type)
if id == 'root':
tree.create_node(tag=id, identifier=id, data=node)
else:
tree.create_node(tag=id, identifier=id, parent=parent, data=node)
通过调用 tree.show() 我对树有了一个很好的了解。 现在我想遍历树并获取之前定义的每个节点的数据。 (不只是 tree.show(data_property="") 的单个属性)
您对如何处理定义的数据有任何想法吗?
我的最终目标是像决策树一样计算树结构,到目前为止我还没有找到使用 Treelib 的好方法。
【问题讨论】:
这段代码只创建了一个节点。您能否编辑并提供我们可以运行的示例树的代码? 【参考方案1】:先说几句:
我会为类Node
使用不同的名称; TreeLib 也定义了一个 Node
类。
当您使用 TreeLib 时,应该不需要在您自己的类实例中维护父引用。这是 TreeLib 已经为您管理的东西。
您可以使用all_nodes_itr
方法迭代节点,这将在每次迭代中为您提供一个TreeLib Node
实例。然后,您可以访问 TreeLib 属性,例如 identifier
或 parent
。对于您自己的属性,访问data
属性,然后访问您要查看的属性(如label
)
这是一个简化的脚本:
class MyNode(object):
def __init__(self, id, label):
self.id = id
self.label = label
from treelib import Tree
tree = Tree()
def add_node(id, label, parent=None):
node = MyNode(id, label)
tree.create_node(tag=id, identifier=id, data=node, parent=parent)
add_node("world", "World")
add_node("north-america", "North America", "world")
add_node("europe", "Europe", "world")
for node in tree.all_nodes_itr():
print(node.identifier, node.data.label)
【讨论】:
可以通过parent
静态方法获取父级:比如可以访问tree.parent(node.identifier)
以上是关于使用 Treelib (Python) 遍历树数据结构的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 中的 treelib 库在树中插入节点?