Добавить ключ, значения динамически в словарь в Python - PullRequest
0 голосов
/ 11 июля 2019

Учитывая путь (ключи) в списке, необходимо добавить значение в данный словарь

data = {'personal_information': {'name' : {'first_name': 'Ashutosh'}}}
path_to_add = ['personal_information', 'address': 'state']
value = 'Delhi'

expected_output = {'personal_information': {'name' : {'first_name': 'Ashutosh'}}, 'address': {'state': 'Delhi'}}

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Вы можете сделать это с помощью рекурсии:

data = {'personal_information': {'name' : {'first_name': 'Ashutosh'}}}
path_to_add = ['personal_information', 'address', 'state']
value = 'Delhi'

def addValue(dictionary, path, value):
    if len(path) > 1:
        if path[0] not in dictionary.keys():
            dictionary[path[0]] = {}
        addValue(dictionary[path[0]], path[1:], value)
    else:
        dictionary[path[0]] = value

print(data)
addValue(data, path_to_add, value)
print(data)

Выходы:

{'personal_information': {'name': {'first_name': 'Ashutosh'}}}
{'personal_information': {'name': {'first_name': 'Ashutosh'}, 'address': {'state': 'Delhi'}}}
0 голосов
/ 11 июля 2019

Вы можете просто зациклить путь, нарезанный до последнего элемента, и работать с объектом, используя setdefault() для создания новых объектов по мере необходимости. После цикла у вас будет ссылка на последний объект, который вы можете использовать для установки значения:

data = {'personal_information': {'name' : {'first_name': 'Ashutosh'}}}
path_to_add = ['personal_information', 'address', 'state']
value = 'Delhi'

def add_to_dict(data, path, value):
    found = data
    for key in path[0:-1]:
        found = found.setdefault(key, {})
    found[path[-1]] = value

add_to_dict(data, path_to_add, value)
print(data)

Результат:

{'personal_information': {'name': {'first_name': 'Ashutosh'}, 'address': {'state': 'Delhi'}}}
...