Was ist der beste Weg, um ein Wörterbuch um ein anderes zu erweitern? Zum Beispiel:
>>> a = { "a" : 1, "b" : 2 }
>>> b = { "c" : 3, "d" : 4 }
>>> a
{'a': 1, 'b': 2}
>>> b
{'c': 3, 'd': 4}
Ich suche nach einer Operation, um diese Vermeidungsschleife zu erhalten for
:
{ "a" : 1, "b" : 2, "c" : 3, "d" : 4 }
Ich möchte etwas tun wie:
a.extend(b) # This does not work
python
dictionary
FerranB
quelle
quelle
Antworten:
Neueste Python Standard Library-Dokumentation
quelle
{"a":2, "b":3}
mit Diktat{"b":4, "c":5}
zu Diktat aktualisieren{"a":2, "b":3,"c":5}
? Natürlich ist es möglich,update()
einigeupdate
vorhandene Einträge stillschweigend überschrieben werden. Das heißt, alle Werte inb
überschreiben die Wertea
für überlappende Schlüssel.Ein schönes Juwel in dieser geschlossenen Frage :
Der "Oneliner-Weg", der keine der Eingabediktate ändert, ist
Erfahren Sie hier, was
**basket_two
(das**
) bedeutet .Im Konfliktfall
basket_two
überschreiben die Elemente von die Elemente vonbasket_one
. Als Einzeiler ist dies ziemlich lesbar und transparent, und ich habe keine Möglichkeit, es zu verwenden, wenn ein Diktat, das eine Mischung aus zwei anderen ist, nützlich ist (jeder Leser, der Schwierigkeiten hat, es zu verstehen, wird tatsächlich sehr gut bedient die Art und Weise, wie dies ihn oder sie zum Lernen anregtdict
und die**
Form ;-). So verwendet zum Beispiel:sind ziemlich häufig in meinem Code.
Ursprünglich eingereicht von Alex Martelli
Hinweis: In Python 3 funktioniert dies nur, wenn jeder Schlüssel in bask_two a ist
string
.quelle
dict
ist leicht zu finden, während sie**
etwas kniffliger ist (Schlüsselwort ist kwargs ). Hier ist eine schöne Erklärung: saltycrane.com/blog/2008/01/…basket_one.update(<dict>)
wie der Name schon sagt, ein vorhandenes Wörterbuch (oder ein geklontes) aktualisiert wird.**anotherdict
Zeichenfolgen sein müssen.Haben Sie versucht, das Wörterbuchverständnis mit der Wörterbuchzuordnung zu verwenden:
Eine andere Möglichkeit ist die Verwendung von dict (iterable, ** kwarg).
In Python 3.9 können Sie mit union | zwei Diktate hinzufügen Operator
quelle
Fügt Schlüssel und Werte von b zu a hinzu und überschreibt sie, wenn bereits ein Wert für einen Schlüssel vorhanden ist.
quelle
Wie andere erwähnt haben,
a.update(b)
für einige dictsa
undb
erreichen wird das Ergebnis , das Sie in Ihrer Frage gestellt haben. Ich möchte jedoch darauf hinweisen , dass viele Male habe ich das gesehenextend
Verfahren zum Abbilden / set Objekte wünschen , dass in der Syntaxa.extend(b)
,a
‚s - Werte sollten nicht durch sein überschriebenb
s Werte‘.a.update(b)
überschreibta
die Werte und ist daher keine gute Wahl fürextend
.Beachten Sie, dass einige Sprachen diese Methode aufrufen
defaults
oderinject
, da dies als eine Möglichkeit zum Einfügen von b-Werten (bei denen es sich möglicherweise um eine Reihe von Standardwerten handelt) in ein Wörterbuch eingefügt werden kann, ohne möglicherweise bereits vorhandene Werte zu überschreiben.Natürlich könnte man einfach feststellen, dass dies
a.extend(b)
fast dasselbe ist wieb.update(a); a=b
. Um die Zuordnung zu entfernen, können Sie dies folgendermaßen tun:Vielen Dank an Tom Leys für diese clevere Idee mit einem
dict
Konstruktor ohne Nebenwirkungen fürextend
.quelle
Sie können auch die Python- Sammlungen verwenden. Chainmap, die in Python 3.3 eingeführt wurde.
Dies hat je nach Anwendungsfall einige mögliche Vorteile. Sie werden hier näher erläutert , aber ich werde einen kurzen Überblick geben:
Dies macht es hauptsächlich für Dinge wie Konfigurationswörterbücher nützlich.
quelle
Falls Sie es als Klasse benötigen , können Sie es mit dict erweitern und die Aktualisierungsmethode verwenden:
quelle