Как пройтись полностью по всему словарю?
У нас есть такой вот словарь с множеством подсловарей:
some_dict = {
"data1": {
"data2": time.time,
"data3": {
"data4": time.time,
"data5": {
"data6": time.time
}
}
},
"data7": time.time
}
Каким образом можно пройтись по всему словарю, и проверить есть ли у значения вызываемая функция и в случае есть она присутствует вызвать и заменить это значение.
Моя попытка выглядит вот так: но я каждый раз в ручную проверяю не находится ли текущее значение ещё одним диктом и так до бесконечности выходит можно сказать.
Попытка:
for k, v in some_dict.items():
if type(v) == dict:
for k_s, v_s in v.items():
if hasattr(v_s, '__call__'):
some_dict[k][k_s] = v_s()
continue
if hasattr(v, '__call__'):
some_dict[k] = v()
Ответы (1 шт):
Автор решения: Edward Grachev
→ Ссылка
Все решается при помощи рекурсии
import time
some_dict = {
"data1": {
"data2": time.sleep,
"data3": {
"data4": time.sleep,
"data5": {
"data6": time.sleep
}
}
},
"data7": time.sleep,
"data8": 'Hello'
}
def search(some_dict: dict):
for key, value in some_dict.items():
# Проверяем на словарь
if isinstance(value, dict):
# Запускаем рекурсию
search(value)
# Проверяем на функцию
elif callable(value):
# Запускаем функцию
value(1)
# Меняем значение
some_dict[key] = 'Выполнил'
return some_dict
print(search(some_dict))