Heim >Backend-Entwicklung >Python-Tutorial >Wie aktualisiere ich verschachtelte Wörterbücher in Python und behalte dabei vorhandene Werte bei?

Wie aktualisiere ich verschachtelte Wörterbücher in Python und behalte dabei vorhandene Werte bei?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-09 06:35:02680Durchsuche

How to Update Nested Dictionaries in Python while Preserving Existing Values?

Aktualisieren verschachtelter Wörterbücher unter Beibehaltung vorhandener Werte

In Python kann das Aktualisieren von Wörterbüchern mit verschachtelten Strukturen schwierig sein, insbesondere wenn Sie Werte ohne verschachtelte Strukturen zusammenführen möchten vorhandene überschreiben. In dieser Frage wird untersucht, wie ein verschachteltes Wörterbuch dictionary1 mit den Inhalten von update aktualisiert wird, während der Wert in Ebene A erhalten bleibt.

Fehler im ursprünglichen Ansatz

Der angegebene Python-Code zeigt einen häufigen Fehler:

dictionary1.update(update)

Dieses einfache Update behält LevelA nicht bei, da das Update-Wörterbuch Vorrang hat und die gesamte Struktur unter Level1 überschreibt.

Rekursive Lösung

Die in der Antwort bereitgestellte Lösung schlägt einen rekursiven Ansatz vor, der Folgendes umfasst:

  1. Durchlaufen der Schlüssel und Werte im Aktualisierungswörterbuch.
  2. Wenn der Wert a ist Mapping (ein anderes Wörterbuch), rufen Sie rekursiv die Aktualisierung für das entsprechende Unterwörterbuch im Originalwörterbuch auf.
  3. Andernfalls aktualisieren Sie den Wert wie gewohnt.

Aktualisierter Code

Hier ist der verbesserte Code basierend auf der vorgeschlagenen Antwort:

def update(d, u):
    for k, v in u.items():
        if isinstance(v, collections.abc.Mapping):
            d[k] = update(d.get(k, {}), v)
        else:
            d[k] = v
    return d

dictionary1 = {
    "level1": {
        "level2": {"levelA": 0, "levelB": 1}
    }
}
update = {
    "level1": {
        "level2": {"levelB": 10}
    }
}
updated_dict = update(dictionary1, update)
print(updated_dict)

Ausgabe

{'level1': {'level2': {'levelA': 0, 'levelB': 10}}}

Erklärung

Diese Lösung aktualisiert die verschachtelten Wörterbücher rekursiv und behält dabei den vorhandenen LevelA-Wert bei, während die Werte unter LevelB wie erwartet aktualisiert werden.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich verschachtelte Wörterbücher in Python und behalte dabei vorhandene Werte bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn