Ändern Sie die Werte in dict von verschachtelten dicts mit Elemente in eine Liste?
Wie würden Sie ändern/erstellen-Schlüssel/- Werte in einem dict von verschachtelten dicts auf der Grundlage der Werte einer Liste, in der das Letzte Element der Liste ist ein Wert für den dict, und der rest der Elemente, die reefer-keys in dicts?
Das wäre die Liste:
list_adddress = [ "key1", "key1.2", "key1.2.1", "value" ]
Dies wäre nur ein problem in Situationen wie beim Parsen von Kommandozeilen-Argumenten. Es ist offensichtlich, dass das ändern/erstellen dieser Wert in einem script wäre ziemlich einfach mit dict_nested["key1"]["key1.2"]["key1.2.1"]["value"]
.
Wäre dies ein verschachteltes dict von dicts:
dict_nested = {
"key1": {
"key1.1": {
"...": "...",
},
"key1.2": {
"key1.2.1": "change_this",
},
},
"key2": {
"...": "..."
},
}
Ich denke, dass in diesem Fall so etwas wie eine rekursive Funktion oder eine Liste Verständnis erforderlich wäre.
def ValueModify(list_address, dict_nested):
...
...
ValueModify(..., ...)
Auch, wenn Elemente in list_address
würde reefer Schlüssel in die nicht vorhandene Wörterbücher, die Sie erstellt werden soll.
- mögliche Duplikate von Punkt aus einer Liste in einem dicitonary variable
- Geändert, meine Antwort an Sie einen Schlüssel erstellen wenn es nicht vorhanden ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
One-liner:
Hinweis:
dict.get
undoperator.getitem
produzieren würde falsch hier Ausnahmen.Eine explizite for-Schleife wie in Joel Cornett Antwort vielleicht mehr lesbar.
Wenn Sie möchten, erstellen Sie den nicht-vorhandenen zwischen-Wörterbücher:
Wenn Sie möchten, um die bestehende zu überschreiben Zwischenwerte, die nicht Wörterbücher, z.B., strings, Ganzzahlen:
Beispiel
Tests
TypeError
beim erstellen von nicht-vorhandenen zwischen-Wörterbücher, wenn der Wertstr
zum Beispiellist_address = ["key1", "key1.2", "key1.2.1", "key1.2.1.1", "value"]
Ich denke, das funktioniert so, du bist nach.
Ich bin mit
isinstance
, die Typ-Prüfung, und im Allgemeinen nicht etwas, das Sie in Python, aber es hat den Wert als erwartet.-- Bearbeitet --
Hinzugefügt, um die fehlenden Schlüssel überprüfen zu setzen verschachtelte Werte, wenn die ursprüngliche
nested_dict
ist nicht vollständig aufgefüllt.Hier eine rekursive Lösung.
Einfügen eines neuen Schlüssel-Wert-paar oder aktualisieren Sie den Wert von ein paar:
test: