Python - вложенный словарь в качестве аргумента - PullRequest
0 голосов
/ 06 ноября 2018

Имея следующий пример словаря:

dict = {
    'key1': {
        'nested_key1': {
            'more_nested_key1': 'a_value'
        }
    },
    'key2': {
        'a_key': 'some_value'
    }
}

Мне нужна функция, которая принимает dict и любое количество вложенных ключей и выполняет действие со значением. Например:

def replace(dict, '['key1']['nested_key1']['more_nested_key1']', 'new_value')

заменит 'a_value' на 'new_value'. Я новичок в Python, есть идеи, как этого добиться?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вы можете передать список ключей функции, перебрать все, кроме последнего, пока не дойдете до самого внутреннего словаря, а затем назначить окончательный ключ:

def replace(dict, keys, value):
    d = dict
    for key in keys[:-1]:
        d = d[key]
    d[keys[-1]] = value
0 голосов
/ 06 ноября 2018

Просто итерируйте по клавишам (кроме последних), каждый раз записывая следующий дикт. Затем для последнего ключа установите элемент в последнем диктовке на value

def replace(dct, *keys, value):
    for key in keys[:-1]:
       dct = dct[key]
    dct[keys[-1]] = value

Использование:

replace(dict, 'key1', 'nested_key1', 'more_nested_key1', value='new_value')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...