Ich weiß, dass diese Frage ziemlich alt ist, poste aber immer noch, was ich mache, wenn ich ein verschachteltes Wörterbuch aktualisieren muss. Wir können die Tatsache verwenden, dass Diktate in Python als Referenz übergeben werden. Angenommen, der Pfad des Schlüssels ist bekannt und durch Punkte getrennt. Forex, wenn wir ein Diktat mit dem Namen data haben:
{
"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/"
}
Und wir wollen die Warteschlangenklasse aktualisieren, der Pfad des Schlüssels wäre - log_config_worker.handlers.queue.class
Wir können die folgende Funktion verwenden, um den Wert zu aktualisieren:
def get_updated_dict(obj, path, value):
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")
Dies würde das Wörterbuch korrekt aktualisieren.