У меня есть обобщенное c anytree, например, это:
Node('/root')
├── Node('/root/branch_1')
└── Node('/root/branch_2')
├── Node('/root/branch_2/subbranch_21')
└── Node('/root/branch_2/subbranch_22')
├── Node('/root/branch_2/subbranch_22/leaf_221')
└── Node('/root/branch_2/subbranch_22/leaf_222')
Для упрощения, давайте предположим для моего вопроса, что имена узлов также являются именами переменных для этих узлов, поэтому Я визуально не загружаю сообщение с избыточными объявлениями.
Я бы хотел, чтобы моя функция обрезала это любое дерево на некоторых его ветвях, листьях и, возможно, на root после списка сохраняемых узлов. Например, если моя функция получает [branch_2, subbranch_21, leaf_221]
, она должна вернуть любое дерево, содержащее эти Узлы, как новые root и удалить обрезанные Узлы, которые не были переданы, но все еще с необходимыми ветвями, которые, возможно, не были заданы, поэтому я должен have:
Node('/root/branch_2')
├── Node('/root/branch_2/subbranch_21')
└── Node('/root/branch_2/subbranch_22')
└── Node('/root/branch_2/subbranch_22/leaf_221')
Node subbranch_22 не было в списке, но он находится на необходимом пути от branch_2 к leaf_221, которые были.
Из документов anytree я только нахожу довольно laconi c Подсказка по обрезке деревьев, которая устанавливает для родителя или детей ветви значение None, но я изо всех сил пытаюсь придумать что-нибудь элегантное или даже слегка надежное, чтобы обрезать дерево.
У вас есть какой-нибудь совет?