获取任意树中的父节点名称

Get parent node name in anytree

我已经使用 anytree 为我的自定义分类法创建了一棵树,我可以使用以下方法搜索树:

from anytree import find
name='c'
find(root, lambda node: node.name == name)

这个 returns 节点 class 的一个对象看起来像这样:

Node('/f/b/d')

因此,对于子 c,d 是直接父级,我只想提取 'd' 而不是上面提到的整个路径。

任何帮助将不胜感激:)

三点注意事项:

  1. 您可以将 anytree.Node 转换为 string
  2. 字符串化节点的前 6 个字符 class 始终是 Node(',最后 2 个字符始终是 ')
  3. anytree.Node class 有一个 separator 属性,你可以用它来拆分字符串化的 Node on

结合这些事实:

In [7]: node
Out[7]: Node('/A/C')

In [8]: str(_next)[6:-2].split(_next.separator)[-1]
Out[8]: 'C'

你可以获得.parent.name

你甚至可以获得祖父母的名字.parent.parent.name(如果存在的话)

from anytree import Node
from anytree import find

root = Node("f")
b = Node("b", parent=root)
d = Node("d", parent=b)
c = Node("c", parent=d)

name='c'
result = find(root, lambda node: node.name == name)

print('result Node:', result)

if result.parent:
    print('parent name:', result.parent.name)

if result.parent and result.parent.parent:
    print('grandparent:', result.parent.parent.name)

结果:

result Node: Node('/f/b/d/c')
parent name: d
grandparent: b