557 Stimmen

Anhängen eines Wörterbuchs an ein Wörterbuch

Ich habe zwei bestehende Wörterbücher, und ich möchte eines davon an das andere "anhängen". Damit meine ich, dass die Schlüssel und Werte des anderen Wörterbuchs in das erste Wörterbuch übernommen werden sollen. Zum Beispiel:

orig = {
   'A': 1,
   'B': 2,
   'C': 3,
}

extra = {
   'D': 4,
   'E': 5,
}

dest = # Something here involving orig and extra

print dest
{
   'A': 1,
   'B': 2,
   'C': 3,
   'D': 4,
   'E': 5
}

Ich denke, dies alles kann durch eine for Schleife (vielleicht?), aber gibt es eine Methode der Wörterbücher oder ein anderes Modul, das mir diese Arbeit erspart? Die aktuellen Wörterbücher, die ich verwende, sind wirklich groß...

9voto

sleeplessnerd Punkte 20253

Es gibt die Methode .update() :)

aktualisieren([andere]) Aktualisieren des Wörterbuchs mit den Schlüssel/Wert-Paaren aus anderen, wobei vorhandene Schlüssel überschrieben werden. Rückgabe Keine.

update() akzeptiert entweder ein anderes Wörterbuchobjekt oder eine Iterable von Schlüssel/Wert-Paaren (als Tupel oder andere Iterables der Länge zwei). Wenn Schlüsselwortargumente angegeben werden, wird das Wörterbuch dann mit diesen Schlüssel/Wert-Paaren aktualisiert: d.update(red=1, blue=2).

Geändert in Version 2.4: Erlaubt, dass das Argument eine Iterable von Schlüssel/Wert-Paaren sein kann und erlaubt Schlüsselwort-Argumente.

8voto

kitsu.eb Punkte 2786

Die Antwort, die ich geben möchte, ist "use collections.ChainMap", aber ich habe gerade entdeckt, dass es erst in Python 3.3 hinzugefügt wurde: https://docs.python.org/3.3/library/collections.html#chainmap-objects

Sie können jedoch versuchen, die Klasse aus dem 3.3-Quellcode zu übernehmen: http://hg.python.org/cpython/file/3.3/Lib/collections/ イニット .py#l763

Hier ist eine weniger funktionsreiche Python 2.x kompatible Version (gleicher Autor): http://code.activestate.com/recipes/305268-chained-map-lookups/

Anstatt ein Wörterbuch mit einem anderen zu erweitern/überschreiben, indem man dict.merge verwendet, oder eine zusätzliche Kopie zu erstellen, die beide zusammenführt, erstellt man eine Nachschlagekette, die beide in der Reihenfolge durchsucht. Da die Zuordnungen nicht dupliziert werden, verbraucht ChainMap sehr wenig Speicher und sieht spätere Änderungen an allen Unterzuordnungen. Da die Reihenfolge eine Rolle spielt, können Sie die Kette auch verwenden, um Standardeinstellungen zu überlagern (z. B. Benutzereinstellungen > config > env).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X