So fügen Sie zwei Python-Wörterbücher zusammen

In einem früheren Tutorial haben wir etwas über Python-Wörterbücher gelernt und sahen, dass sie als ungeordnete Sätze mit a gelten Schlüsselwert Paar, wo Schlüssel werden verwendet, um auf Elemente anstatt auf die Position zuzugreifen, wie beispielsweise in Listen.

In diesem kurzen Tipp zeige ich Ihnen, wie Sie zwei Wörterbücher miteinander verketten.

Die Update () - Methode

Nehmen wir an, wir haben die folgenden zwei Wörterbücher:

dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5

Wie können wir diese beiden Wörterbücher in einem einzigen Wörterbuch zusammenführen? Eine Funktion, die wir in dieser Hinsicht nutzen können, ist Update ([Sonstiges]). Wie in der Python-Dokumentation angegeben:

Aktualisieren Sie das Wörterbuch mit den Schlüssel / Wert-Paaren aus andere, Vorhandene Schlüssel überschreiben. Rückkehr Keiner.
aktualisieren() akzeptiert entweder ein anderes Wörterbuchobjekt oder ein iterierbares Schlüssel / Wert-Paar (als Tupel oder andere iterierbare Elemente der Länge zwei). Wenn Schlüsselwortargumente angegeben werden, wird das Wörterbuch mit diesen Schlüssel / Wert-Paaren aktualisiert: Update (rot = 1, blau = 2).

Um die beiden oben genannten Wörterbücher zusammenzuführen, können Sie Folgendes eingeben:

dict2.update (dict1)

Angenommen, Sie haben die folgende Anweisung eingegeben, um die Ergebnisse anzuzeigen:

dict2.update drucken (dict1)

In diesem Fall wirst du bekommen Keiner! Das liegt daran, dass die aktualisieren() Funktion gibt kein neues Wörterbuch zurück. Um das Ergebnis der Verkettung zu erhalten, geben Sie einfach Folgendes ein:

Drucken Sie dict2

In diesem Fall erhalten Sie folgende Ausgabe:

'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5

Was wäre, wenn wir folgendes tun würden??

dict1.update (dict2) druckt dict1

In diesem Fall erhalten Sie folgende Ausgabe:

'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5

Beachten Sie das im ersten Fall, dict2.update (dict1), Wir aktualisieren das Wörterbuch dict2 mit den Schlüssel / Wert-Paaren von dict1, und vorhandene Schlüssel überschreiben. Der vorhandene Schlüssel, wie wir feststellen können, ist 'bookC', was wird den Wert haben 3 in diesem Fall, da wir mit den Schlüssel / Wert-Paaren von aktualisieren dict1. Dies wird im letzteren Fall umgekehrt, dict1.update (dict2), Wo wir das Wörterbuch aktualisieren dict1 mit Schlüssel / Wert-Paaren aus dict2.

Es gibt jedoch ein Problem bei der Verwendung aktualisieren() zwei Wörterbücher zusammenführen. Das Problem liegt darin, dass das ursprüngliche Wörterbuch geändert werden kann. Mit anderen Worten zum Beispiel im ersten Fall, dict2.update (dict1), die ursprüngliche Version von dict2 könnte geändert werden, und im letzteren Fall, dict1.update (dict2), die ursprüngliche Version von dict1 könnte geändert werden. Das heißt, dass Sie verwenden können aktualisieren() Zwei Wörterbücher zusammenführen, wenn Sie nicht an der ursprünglichen Version des zu aktualisierenden Wörterbuchs interessiert sind. Mit der ursprünglichen Version hier meine ich, den Wert des Schlüssels zu behalten.

Zwei Wörterbücher in einem Ausdruck zusammenführen

Eine andere Methode, mit der Sie zwei Wörterbücher zusammenführen können, wobei Sie eine solche Aufgabe in einem Ausdruck ausführen können, lautet wie folgt:

Diktat drucken (dict2, ** dict1)

Die Ausgabe dieser Anweisung lautet:

'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5

Somit, dict1 überschreibt dict2. Wenn wir wollen dict2 überschreiben dict1, wir geben ein:

Diktat drucken (dict1, ** dict2)

Die Ausgabe in diesem Fall wäre:

'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5

Schlüsselwerte beibehalten 

Zurück zur vorherigen Ausgabe der Beibehaltung der Schlüsselwerte, wie können wir zwei Wörterbücher zusammenführen, während die Originale jedes Wörterbuchs erhalten bleiben?

Eine Problemumgehung hierfür kann wie folgt sein (aus der Antwort in diesem StackOverflow-Thread entnommen):

von itertools import chain aus kollektionen importieren defaultdict dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5 dict3 = defaultdict (Liste) für k, v in der Kette (dict1.items (), dict2.items ()): dict3 [k] .append (v) für k, v in dict3.items (): print (k, v)

Die Ausgabe in diesem Fall lautet:

('bookA', [1]) ('bookB', [2]) ('bookC', [3, 2]) ('bookD', [4]) ('bookE', [5])

Wie Sie anhand dieses kurzen Hinweises sehen können, ist es sehr einfach, zwei Wörterbücher mit Python zusammenzuführen, und es wird etwas komplexer, wenn Sie die Werte des gleichen Schlüssels in jedem Wörterbuch beibehalten möchten.

Lerne Python

Lernen Sie Python mit unserem kompletten Python-Tutorial, egal ob Sie gerade erst anfangen oder ein erfahrener Programmierer sind, der neue Fähigkeiten erlernen möchte.