прошу помочь понять как отрабатывается код рекурсии в заданной функции
def get_recursively(search_dict, field):
"""
Takes a dict with nested lists and dicts,
and searches all dicts for a key of the field
provided.
"""
fields_found = []
for key, value in search_dict.items():
if key == field:
fields_found.append(value)
elif isinstance(value, dict):
results = get_recursively(value, field)
print(results)
for result in results:
fields_found.append(result)
return fields_found
Ответы (2 шт):
Автор решения: GrAnd
→ Ссылка
Смотри комментарии в коде.
def get_recursively(search_dict, field):
# тут будет список значений полей с именами field
fields_found = []
# идём по словарю по всем парам "ключ":"значение"
for key, value in search_dict.items():
# если имя ключа равно искомому
if key == field:
# то добавляем его значение в список значений
fields_found.append(value)
# иначе если значение - это словарь
elif isinstance(value, dict):
# то ищем рекурсивно уже в этом словаре
results = get_recursively(value, field)
# ой, даже и не знаю что эта функция делает :)
print(results)
# идем по всем значениям результата, который вернулся из рекурсии
for result in results:
# и добавляем их в наш список значений
fields_found.append(result)
# на самом деле вместо этого цикла
# проще было написать 'fields_found += results'
# возвращаем список найденных значений
return fields_found
Автор решения: Андрей Коробейников
→ Ссылка
для начала красивая статья о рекурсиях
Данная функция нужна для рекурсивного поиска элемента во вложенных словарях
def get_recursively(search_dict, field):
"""
Takes a dict with nested lists and dicts,
and searches all dicts for a key of the field
provided.
"""
fields_found = []
for key, value in search_dict.items():
# итерация по ключам и значениям словаря
if key == field:
# если ключ является искомым элементом, то его значение складываем в результирующий список
fields_found.append(value)
elif isinstance(value, dict):
# иначе если значение ключа является словарем, то вызываем эту же функцию(саму себя), при этом место для поиска словарь value
results = get_recursively(value, field)
# принимаем результат отработавшей функции(список с найденными значениями, возможно пустой)
print(results)
# печатаем результат рекурсивных ф-й
for result in results:
fields_found.append(result)
# складываем результат рекурсивных функций в список результатов
return fields_found # возвращаем результат