Я начал использовать anytree
, но в настоящее время сталкиваюсь с некоторой проблемой, повторяющейся в моем дереве.
Тестовое дерево:
top = Node("top", keywords="topleveltree")
hello = Node("hello", keywords="hello", parent=top)
hello1 = Node("hello X", keywords="hello X", answer="Say hello to X", parent=hello)
hello2 = Node("hello Y", keywords="hello Y", answer="Say hello to Y", parent=hello)
goodbye = Node("goodbye", keywords="goodbye", parent=top)
goodbye1 = Node("goodbye X", keywords="goodbye X", answer="Say goodbye to X", parent=goodbye)
RenderTree:
Node('/top', keywords='topleveltree')
├── Node('/top/hello', keywords='hello')
│ ├── Node('/top/hello/hello X', answer='Say hello to X', keywords='hello X')
│ └── Node('/top/hello/hello Y', answer='Say hello to Y', keywords='hello Y')
└── Node('/top/goodbye', keywords='goodbye')
└── Node('/top/goodbye/goodbye X', answer='Say goodbye to X', keywords='goodbye X')
Мой скрипт извлекает первый уровень моего дерева (/ top / hello и / top / goodbye), и теперь я в основном пытаюсь получить то, что находится под ними (особенно ключевые слова и ответ).
Мне удалось добиться этого, используя несколько способов, таких как hello.descendants
или просто используя LevelOrderIter(hello)
, однако сейчас я пытаюсь сделать то же самое с помощью некоторой логики Python (где переменная теперь является строкой) .
Я пытался запустить Node (привет) .descendants, но он возвращает пустой массив. Однако, если я запускаю type(hello)
и type(Node('hello'))
, оба возвращают <class 'anytree.node.node.Node'>
например:
categories = ['hello','goodbye']
for category in categories:
print category # string
print Node(category) # Node('/hello')
print hello # Node('/top/hello', keywords='hello')
hello.descendants # ok
Node(category).descendants # ()
[node.name for node in PreOrderIter(hello, maxlevel=3)] # ok
[node.name for node in PreOrderIter(Node('hello'), maxlevel=3)] # return empty
У меня очень мало опыта работы с деревом, поэтому я думаю, что упускаю что-то простое, но не могу найти что.