获取任意树中的父节点名称
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'
而不是上面提到的整个路径。
任何帮助将不胜感激:)
三点注意事项:
- 您可以将
anytree.Node
转换为 string
- 字符串化节点的前 6 个字符 class 始终是
Node('
,最后 2 个字符始终是 ')
-
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
我已经使用 anytree 为我的自定义分类法创建了一棵树,我可以使用以下方法搜索树:
from anytree import find
name='c'
find(root, lambda node: node.name == name)
这个 returns 节点 class 的一个对象看起来像这样:
Node('/f/b/d')
因此,对于子 c,d 是直接父级,我只想提取 'd'
而不是上面提到的整个路径。
任何帮助将不胜感激:)
三点注意事项:
- 您可以将
anytree.Node
转换为string
- 字符串化节点的前 6 个字符 class 始终是
Node('
,最后 2 个字符始终是')
-
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