0

我使用 python 中的 anytree 模块构建了一棵树。代码如下:

def list_anytree(lst):
    rootname = lst[0][0]
    node = Node(rootname)
    for j in lst:
        parentnode = node
        assert j[0] == parentnode.name
        for currentnodename in j[1:]:
            currentnode = next(
                (node for node in parentnode.children if node.name == currentnodename),
                None,
            )
            if currentnode is None:
                currentnode = Node((currentnodename), parent=parentnode)
            parentnode = currentnode
    return node

lst=[["a","b","c"],["a","b","d"],["a","b","c",]]

anytree=list_anytree(lst)
for pre,fill,node in RenderTree(anytree):
    print(f"{pre}{node.name}")

如何为树中的每个节点分配一个 ID?

4

1 回答 1

0

结果树是:

a
└── b
    ├── c
    └── d

节点对象实例本身已经是一个 id。您可以随时为对象分配新属性。例如,当您遍历树时

for idx, node in enumerate(PreOrderIter(anytree)):
    node.idx = idx

或者你使用 pythonid()函数,它给出一个唯一的数字。请注意,此数字在每次调用时都会更改:

for pre, fill, node in RenderTree(anytree):
    id_ = id(node)
    print(f"{pre}{node.name} {node.idx} {id_:08X}")

结果是

a 0 7FE95CDB1390
└── b 1 7FE95CDB1FD0
    ├── c 2 7FE95CDC4048
    └── d 3 7FE95CDC4080
于 2020-01-30T19:45:36.610 回答