Radzhab
@Radzhab

Как преобразовать класс Node в dict?

Есть класс, в котором я храню иерархичные данные
class Node:
    def __init__(self, name: str, parent: 'Node' = None):
        self.name = name
        self.parent = parent
        self.children = []
 
    def add_child(self, obj: 'Node'):
        self.children.append(obj)


input = [
(None, 'a'),
(None, 'b'),
(None, 'c'),
('a', 'a1'),
('a', 'a2'),
('a2', 'a21'),
('a2', 'a22'),
('b', 'b1'),
('b1', 'b11'),
('b11', 'b111'),
('b', 'b2'),
('c', 'c1'),
]


Все эти данные я заливаю в словарь.

name_by_node = dict()
name_by_node[None] = Node('ROOT', None)
 
 
for parent, child in input:
    parent_node = name_by_node[parent]
    if child not in name_by_node:
        name_by_node[child] = Node(child, parent_node)
        result[child] = parent_node.name
    parent_node.add_child(name_by_node[child])


Как рекурсивно вывести данные в виде dict? Чтобы получилось вот так

result = {
    'a': {'a1': {}, 'a2': {'a21': {}, 'a22': {}}},
    'b': {'b1': {'b11': {'b111': {}}}, 'b2': {}},
    'c': {'c1': {}},
}
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ответы на вопрос 1
longclaps
@longclaps
Друг мой, ты уже давно здесь, но по странному, нелепому стечению обстоятельств никто не рассказал тебе о пользе рекурсии в деле обхода дерева. Так пусть это буду я, это для меня - большая честь.
Или не буду. Видишь ли, то, что ты нарисовал - очень небольшое дерево с краткими метками узлов и уровнем вложенности не более 3, так что строчки вышли короткими и аккуратными. Сколь-нибудь высокое дерево в смотрибельном виде так отобразить не получится.
И всё-таки польза в моём ответе есть, она в начале первого абзаца.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы