为树中的每个节点生成ID

2024-10-04 07:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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


Tags: nameinnonenodeforifprelist
1条回答
网友
1楼 · 发布于 2024-10-04 07:26:14

生成的树是:

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

节点对象实例本身已经是一个id。 可以随时为对象指定新属性。 例如,当您在树上迭代时

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

或者使用python id()函数,它给出一个唯一的数字。 请注意,此数字在每次调用时都会发生变化:

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

相关问题 更多 >