Как удобно получить все значения dict?

Добрый день, у меня есть такой dict.
my_dict = {'key1' : 'test', 'key2' : {'medium' : True}, 'key3' : {'hard' : True, 'date' : {'days' : 0} } }

Мне нужно как то нужно получить ВСЕ значения этого dict. В этом случаи это - 'test', True, True, 0
И заменить эти значения. У меня есть специальная функция которая обрабатывает значения и на выход дает другие - manipate(value)

Как это можно сделать? хотел сначала пройтись по всему списку, и найти все ключи и значения но он просто печатает их в консоль, и не ясно как нужно заменить значения.
Сам код который печатает элементы в консоль:
def print_dict(v, return_value, prefix=''):

    if isinstance(v, dict):
        for k, v2 in v.items():
        	p2 = "{}['{}']".format(prefix, k)
        	print_dict(v2, p2)
    elif isinstance(v, list):
        for i, v2 in enumerate(v):
        	p2 = "{}[{}]".format(prefix, i)
        	print_dict(v2, p2)
    else:
    	print('{} = {}'.format(prefix, repr(v)))
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Ну идею-то тебе верную подкинули - рекурсия в помощь. В большинстве случаев сработает. И, думаю, будет проще создать новый словарь.
import typing as t
def transform(inp: str) -> str:
    return inp   # тут твоё преобразование строк

def change_list(lst: t.List[t.Any]) -> t.List[t.Any]:
    result: t.List[t.Any] = []
    for item in lst:
        if isinstance(item, str):
            result.append(transform(item))
        elif isinstance(item, list):
            result.append(change_list(item))
        elif isinstance(item, dict):
            result.append(change_dict(item))
        else:
            result.append(item)
    return result

def change_dict(dct: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]:
    result: t.Dict[str, t.Any] = {}
    for k, v in dct.items():
        if isinstance(v, str):
            result[k] = transform(v)
        elif isintance(v, dict):
            result[k] = change_dict(v)
        elif isinstance(v, list):  # что делать со списками, если они будут?
            result[k] = change_list(v)
        else:
            result[k] = v
    return result
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы