-1

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

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

这将返回一个看起来像这样的 Node 类的对象:

Node('/f/b/d')

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

任何帮助,将不胜感激 :)

4

2 回答 2

2

你可以得到.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
于 2021-11-23T01:57:53.617 回答
1

需要注意的三点:

  1. 你可以投射anytree.Nodestring
  2. 字符串化的 Node 类的前 6 个字符总是Node(',最后 2 个字符总是')
  3. 该类anytree.Node有一个separator属性,您可以使用它来拆分字符串化Node

结合这些事实:

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

In [8]: str(_next)[6:-2].split(_next.separator)[-1]
Out[8]: 'C'
于 2021-11-23T00:30:45.587 回答