прошу помочь понять как отрабатывается код рекурсии в заданной функции

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 # возвращаем результат
→ Ссылка