Heim >Backend-Entwicklung >Python-Tutorial >Wie aktualisiere ich ein verschachteltes Wörterbuch in Python und behalte dabei bestimmte Werte in unterschiedlichen Tiefen bei?

Wie aktualisiere ich ein verschachteltes Wörterbuch in Python und behalte dabei bestimmte Werte in unterschiedlichen Tiefen bei?

Linda Hamilton
Linda HamiltonOriginal
2024-11-12 03:58:021067Durchsuche

How to Update a Nested Dictionary in Python While Preserving Specific Values at Different Depths?

Aktualisierung verschachtelter Wörterbücher mit Tiefenerhaltung

In Python kann die Aktualisierung eines verschachtelten Wörterbuchs schwierig sein, insbesondere wenn Sie dessen Inhalte mit zusammenführen möchten ein anderes Wörterbuch unter Beibehaltung spezifischer Werte in unterschiedlichen Tiefen. Stellen Sie sich das folgende Szenario vor:

Wie können wir bei zwei Wörterbüchern, Wörterbuch1 und Update, Wörterbuch1 mit dem Inhalt von Update aktualisieren, ohne einen bestimmten Wert auf der tiefsten Ebene (z. B. „EbeneA“) zu überschreiben, während alle anderen Werte aktualisiert werden? ?

dictionary1 = {
    "level1": {
        "level2": {"levelA": 0, "levelB": 1}
    }
}
update = {
    "level1": {
        "level2": {"levelB": 10}
    }
}

Wenn wir einfach die Aktualisierungsmethode verwenden, überschreibt sie das gesamte Unterverzeichnis „level2“ und verliert den Wert „levelA“:

dictionary1.update(update)
print(dictionary1)
{
    "level1": {
        "level2": {"levelB": 10}
    }
}

Um diese Herausforderung anzugehen , wir benötigen eine rekursive Lösung, die die variable Tiefe der Wörterbücher berücksichtigt und Werte entsprechend zusammenführt.

Rekursive Lösung:

Der folgende Code implementiert eine rekursive „partielle Aktualisierung“ Funktion, die Wörterbuchwerte aktualisiert, ohne bestimmte Schlüssel zu überschreiben:

import copy

def partial_update(d, u, preserve):
    for k, v in u.items():
        if isinstance(v, dict):
            if d.get(k, None) is None:
                d[k] = copy.deepcopy(v)
            else:
                partial_update(d[k], v, preserve)
        elif k in preserve:
            continue
        else:
            d[k] = copy.deepcopy(v)
    return d

Die Funktion „partial_update“ benötigt drei Argumente:

  • d: Das zu aktualisierende Wörterbuch
  • u: Das Wörterbuch, das die Aktualisierungen enthält
  • preserve: Eine Liste von Schlüsseln, die vor dem Überschreiben geschützt werden sollen

Um den Wert „levelA“ in unserem Beispiel beizubehalten, können wir den folgenden Code verwenden:

partial_update(dictionary1, update, ["levelA"])
print(dictionary1)
{
    "level1": {
        "level2": {"levelA": 0, "levelB": 10}
    }
}

Bei dieser Lösung erstellen wir vor der Aktualisierung eine Kopie der Wörterbücher, um unerwartete Änderungen zu verhindern. Dadurch wird sichergestellt, dass die Originalwörterbücher auch nach der Teilaktualisierung erhalten bleiben.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich ein verschachteltes Wörterbuch in Python und behalte dabei bestimmte Werte in unterschiedlichen Tiefen 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