【问题标题】:Iterating through tree datastructure using Treelib (Python)使用 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 的好方法。

【问题讨论】:

  • 这段代码只创建了一个节点。您能否编辑并提供我们可以运行的示例树的代码?

标签: python data-structures tree decision-tree treelib


【解决方案1】:

先说几句:

  • 我会为类 Node 使用不同的名称; TreeLib 也定义了一个 Node 类。
  • 当您使用 TreeLib 时,应该不需要在您自己的类实例中维护父引用。这是 TreeLib 已经为您管理的东西。

您可以使用all_nodes_itr 方法迭代节点,这将在每次迭代中为您提供一个TreeLib Node 实例。然后,您可以访问 TreeLib 属性,例如 identifierparent。对于您自己的属性,访问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)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 2013-01-12
相关资源
最近更新 更多