Рекурсивный перебор словаря
Есть словарь в котором хранятся данные вида
tree = {'Записи': {'Новая запись ': {'Новая запись 2': {}, 'Запись уровень 2': {}}, 'Запись - Уровень': {}, 'тест': {}, 'Новая запись 2-0': {}}}
Подскажите, как написать рекурсивную функцию, что бы такой словарь разобрать в массив вида
array = ['Записи', 'Новая запись ', 'Новая запись 2', 'Запись уровень 2', 'Запись - Уровень', 'тест', 'Новая запись 2-0']
Причем сложенность словаря может быть любой. Уверен, что такой вопрос уже задавался, но я что то не могу придумать рекурсивный метод для такого. Спасибо всем, кто подскажет!
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
tree = {'a': {'b': {'c': {}, 'd': {}}, 'e': {}, 'f': {}, 'g': {}}}
def deep_keys(obj, arr = None):
if not arr: arr = [] # Список создается один раз, при первом вызове.
for key, val in obj.items():
arr.append(key)
if type(val) == dict:
deep_keys(val, arr) # Передается на заполнение в дальнейшие вызовы...
return arr
print( deep_keys(tree) ) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
* При передаче списка в виде аргумента функции, копируется не сам список, а ссылка на него. Работая со ссылкой на один и тот же объект arr, все вложенные вызовы напрямую добавляют туда элементы через arr.append(key).