windows -подобное дерево-шоу для вложенных диктов - PullRequest
0 голосов
/ 11 января 2020

проблема должна быть довольно понятной. У меня есть вложенный dict, и я хотел бы получить из него строку, которая выглядит как команда windows tree для папок.

Это будет примерный dict:

dictionary = {"a": {"b": {"c": None}, "d": None}, "e": None}

И ожидаемый результат будет:

├───a
│   ├───b
│   │   └───c
│   └d
└──e

Правильная репрезентация этого не является моей главной целью, просто было бы больше отступов на «более вложенную» сущность, это было бы удивительно. Я знаю, что мне нужно будет создать рекурсивную функцию, но мои попытки настолько провалены, что даже не стоит делиться ими. Поэтому я пришел сюда :)

Моя попытка кода в соответствии с просьбой ...

dictio = {"a": {"b": {"c": None}, "d": None}, "e": None}


x = 0
end = {}
def recursive(dic):
    global x
    for key in dic:
        if isinstance(dic[key], dict):
            end[list(dic[key].keys())[0]] = x
            x += 1
            recursive(dic[key])
        else:
            end[list(dic.keys())[0]] = x
            x -= 1

recursive(dictio)
print(end)

В результате получается {'b': 1, 'c': 2, 'a' : 0}

1 Ответ

0 голосов
/ 11 января 2020

Вы можете использовать рекурсию с генератором:

dictionary = {"a": {"b": {"c": None}, "d": None}, "e": None}
def to_tree(d, c = 0):
  for a, b in d.items():
     yield '   '.join('|' for _ in range(c+1))+f'---{a}'
     yield from ([] if b is None else to_tree(b, c+1))

print('\n'.join(to_tree(dictionary)))

Выход:

|---a
|   |---b
|   |   |---c
|   |---d
|---e
...