Поиск максимума в словаре, значениями которого являются списки, словари и списки словарей

Дано

Есть словарь, значениями которого являются списки, словари и списки словарей. Все ключи - str. Все значения самого низкого уровня вложености - int.

Для примера:

d = {
  "key1": [3, 5, 6, 7, 15, 16],
  "key2": {
    "key3": 5,
    "key4": 20,
    "key5": 12
  },
  "key6": [
    {"key7": 5, "key8": 10},
    {"key7": 8, "key8": 10},
  ],
  "key9": [1, 7, 4, 2,]
}

При этом количество значений каждого типа может быть произвольно любым.

Требуется

Надо найти максимум из всех значений.

Мое решение заключается в том, чтобы проходя по ключам проверять тип и далее получать значения способами подходящими для каждого типа, можно их, например, складывать в множество и потом взять максимум, вот типа того:

total_set = set()
for k in d:
    if isinstance(d[k], list):
        if isinstance(d[k][0], int | float):
            total_set |= set(d[k])
        else:
            for vl in d[k]:
                total_set |= set(vl.values())
    else:
        total_set |= set(d[k].values())
print(max(total_set))

А как-то не в лоб можно? Попроще?


Ответы (1 шт):

Автор решения: Munchen777

Есть еще вариант, который не займет памяти (по памяти будет O(1)).

  1. Инициализируем переменную, например, maximum = float("-inf").
  2. Далее проходимся по всем значениям. Чтобы просматривать структуру в глубину, лучше подойдет рекурсия.
→ Ссылка