Я знаю, что этот вопрос довольно старый, но все еще публикует информацию о том, что я делаю, когда мне нужно обновить вложенный словарь.Мы можем использовать тот факт, что dicth передаются по ссылке в python. Предполагая, что путь к ключу известен и разделен точками.Форекс, если у нас есть данные с именем dict:
{
"log_config_worker": {
"version": 1,
"root": {
"handlers": [
"queue"
],
"level": "DEBUG"
},
"disable_existing_loggers": true,
"handlers": {
"queue": {
"queue": null,
"class": "myclass1.QueueHandler"
}
}
},
"number_of_archived_logs": 15,
"log_max_size": "300M",
"cron_job_dir": "/etc/cron.hourly/",
"logs_dir": "/var/log/patternex/",
"log_rotate_dir": "/etc/logrotate.d/"
}
И мы хотим обновить класс очереди, путь к ключу будет - log_config_worker.handlers.queue.class
Мы можем использовать следующую функциючтобы обновить значение:
def get_updated_dict(dict_to_update, path, value):
obj = dict_to_update
key_list = path.split(".")
for k in key_list[:-1]:
obj = obj[k]
obj[key_list[-1]] = value
get_updated_dict(data, "log_config_worker.handlers.queue.class", "myclass2.QueueHandler")
Это правильно обновит словарь.