функция для словаря, которая возвращает наибольший ключ=int

swarmone

Новичок
Пользователь
Мар 10, 2021
10
0
1
Здравствуйте, я только начала изучать Python и столкнулась с вот такой сложно для меня задачей:

Написать функцию которая в качестве аргумента принимает словарь, в котором в качестве ключей — числа int, а в качестве значений — либо словарь, с такой же структурой, либо None. Функция должна вернуть максимально большое число находящееся в этой структуре на произвольной глубине.

Напишите два решения этой задачи - одно с использованием рекурсии, другое - без использования рекурсии

Я смогла только написать функцию для простого словаря, а вот для словаря в словаре нужна помощь, спасибо!
Моё решение:
Python:
 def max_key_in_dict(a):
    b = max(list(a.keys()))
    return b
a = {
    1: None,
    100: None,
    #30: {
        #42: None,
        #1000: None
    #}
}
print(a)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример:
Python:
# тестовый словарь
a = {
    1: None,
    100: None,
    101: {
        15: {
            300000: None
        },
        2000: None
    },
    400000: {
        42: None,
        55: {
            1: None,
            2: {
                5: None,
                6: {
                    3: None,
                    1000000: None
                },
                100000: None
            },
            10000: None
        },
        1000: None
    }
}


# решение без рекурсии
def return_max_key(dict_):
    list_of_dicts = []
    max_value = 0
    test_dict = dict_

    while True:
        for k, v in test_dict.items():
            if k > max_value:
                max_value = k
            if v is not None:
                list_of_dicts.append(v)

        if len(list_of_dicts) > 0:
            test_dict = list_of_dicts.pop(0)
        else:
            break

    return max_value


# решение с рекурсией
def return_max_key_recursive(dict_, max_value=0):
    max_value = max_value

    for k, v in dict_.items():
        if k > max_value:
            max_value = k
        if v is not None:
            max_value = return_max_key_recursive(v, max_value)

    return max_value


# проверка
print('Результат без рекурсии:', return_max_key(a))
print('Результат с рекурсией:', return_max_key_recursive(a))
 
  • Мне нравится
Реакции: swarmone

Форум IT Специалистов