Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich mehrstufige Wörterbücher in Python rekursiv zusammenführen?

Wie kann ich mehrstufige Wörterbücher in Python rekursiv zusammenführen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-04 20:42:11340Durchsuche

How Can I Recursively Merge Multi-Level Dictionaries in Python?

Mehrstufige Wörterbücher gründlich zusammenführen

In Python kann das rekursive Zusammenführen von Wörterbüchern unter Beibehaltung einer unbekannten Verschachtelungstiefe eine Herausforderung sein. Hier ist eine Lösung, die dieses Problem behebt:

def deep_merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                deep_merge(a[key], b[key], path + [str(key)])
            elif a[key] != b[key]:
                raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

Diese Funktion verwendet zwei Wörterbücher als Eingabe und führt deren Inhalte rekursiv zusammen. Es behält einen Pfad bei, um die aktuelle Verschachtelungsebene zu verfolgen, um bei Konflikten präzisere Fehlermeldungen bereitzustellen.

Beispiel:

dict1 = {1:{'a':{'A'}}, 2:{'b':{'B'}}}
dict2 = {2:{'c':{'C'}}, 3:{'d':{'D'}}}
result = deep_merge(dict1, dict2)

print(result)
# {1:{'a':{'A'}}, 2:{'b':{'B'}, 'c':{'C'}}, 3:{'d':{'D'}}}

Beachten Sie, dass deep_merge das erste Argument mutiert, weshalb result enthält das zusammengeführte Wörterbuch.

Um mehrere Wörterbücher zusammenzuführen, ohne eines davon zu ändern, übergeben Sie sie als Schlüsselwort Argumente:

from functools import reduce
result = reduce(deep_merge, [dict1, dict2, ...], {})

Das obige ist der detaillierte Inhalt vonWie kann ich mehrstufige Wörterbücher in Python rekursiv zusammenführen?. 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