【问题标题】:Get parent node name in anytree在anytree中获取父节点名称
【发布时间】:2021-11-22 21:51:03
【问题描述】:

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

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

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

Node('/f/b/d')

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

任何帮助将不胜感激:)

【问题讨论】:

  • 我不知道anytree,但也许它可以搜索node.next.name == name

标签: python tree anytree


【解决方案1】:

你可以得到.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

【讨论】:

  • 非常感谢!它对我有用。
【解决方案2】:

注意三点:

  1. 您可以将anytree.Node 转换为string
  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'

【讨论】:

  • 感谢您的回复。 @furas 答案更准确,我在寻找什么:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多