Ist es möglich, einem Python-Wörterbuch nach seiner Erstellung einen Schlüssel hinzuzufügen?
Es scheint keine .add()
Methode zu haben .
python
dictionary
lookup
lfaraone
quelle
quelle
{**mydict, 'new_key': new_val}
.Antworten:
quelle
.update()
Methode? Welches ist besser wann?d[key]=val
Syntax, da sie kürzer ist und jedes Objekt als Schlüssel behandeln kann (solange es hashbar ist) und nur einen Wert festlegt, während dies besser.update(key1=val1, key2=val2)
ist, wenn Sie mehrere Werte gleichzeitig festlegen möchten, solange die Schlüssel vorhanden sind sind Strings (da kwargs in Strings konvertiert werden).dict.update
kann auch ein anderes Wörterbuch verwenden, aber ich persönlich bevorzuge es, nicht explizit ein neues Wörterbuch zu erstellen, um ein anderes zu aktualisieren.$foo[ ] = [ . . . . ]
Verwenden Sie Folgendes, um mehrere Schlüssel gleichzeitig hinzuzufügen
dict.update()
:Zum Hinzufügen eines einzelnen Schlüssels hat die akzeptierte Antwort weniger Rechenaufwand.
quelle
x[-1] = 44
der-1
Wert auch am Ende. Wie auch immer, die Antwort wurde bearbeitet und ist jetzt viel besser. Das Aktualisieren mit einem Wörterbuch ist gut, wenn es wahrscheinlich viele Elemente enthält.Ich möchte Informationen über Python-Wörterbücher konsolidieren:
Ein leeres Wörterbuch erstellen
Erstellen eines Wörterbuchs mit Anfangswerten
Einfügen / Aktualisieren eines einzelnen Wertes
Einfügen / Aktualisieren mehrerer Werte
Erstellen eines zusammengeführten Wörterbuchs ohne Änderung der Originale
Elemente im Wörterbuch löschen
Überprüfen Sie, ob sich bereits ein Schlüssel im Wörterbuch befindet
Durch Paare in einem Wörterbuch iterieren
Erstellen Sie ein Wörterbuch aus zwei Listen
Neu in Python 3.5
Erstellen eines zusammengeführten Wörterbuchs ohne Änderung der Originale:
Dies verwendet eine neue Funktion namens Dictionary Unpacking .
Neu in Python 3.9
Aktualisieren oder fügen Sie Werte für ein vorhandenes Wörterbuch hinzu
Der Update-Operator arbeitet
|=
jetzt für Wörterbücher:Erstellen eines zusammengeführten Wörterbuchs ohne Änderung der Originale
Der Zusammenführungsoperator arbeitet
|
jetzt für Wörterbücher:Fühlen Sie sich frei, mehr hinzuzufügen!
quelle
Ja, es ist möglich und es gibt eine Methode, die dies implementiert, aber Sie möchten sie nicht direkt verwenden.
Um zu demonstrieren, wie und wie man es nicht verwendet, erstellen wir ein leeres Diktat mit dem Diktatliteral
{}
:Best Practice 1: Indexnotation
Um dieses Diktat mit einem einzigen neuen Schlüssel und Wert zu aktualisieren, können Sie die tiefgestellte Notation (siehe Zuordnungen hier) verwenden , die die Elementzuweisung vorsieht:
my_dict
ist jetzt:Best Practice 2: Die
update
Methode - 2 MöglichkeitenMit der
update
Methode können wir das Diktat auch effizient mit mehreren Werten aktualisieren . Wir können hier unnötigerweise ein Extra erstellendict
, also hoffen wir, dass unserdict
bereits erstellt wurde und von einem anderen Zweck stammt oder für einen anderen Zweck verwendet wurde:my_dict
ist jetzt:Eine andere effiziente Möglichkeit, dies mit der Aktualisierungsmethode zu tun, sind Schlüsselwortargumente. Da es sich jedoch um legitime Python-Wörter handeln muss, können Sie keine Leerzeichen oder speziellen Symbole verwenden oder den Namen mit einer Zahl beginnen. Viele halten dies jedoch für lesbarer um Schlüssel für ein Diktat zu erstellen, und hier vermeiden wir sicherlich das Erstellen eines zusätzlichen unnötigen
dict
:und
my_dict
ist jetzt:Jetzt haben wir drei pythonische Möglichkeiten zur Aktualisierung von a behandelt
dict
.Magische Methode,
__setitem__
und warum sollte es vermieden werdenEs gibt eine andere Möglichkeit, eine zu aktualisieren
dict
, die Sie nicht verwenden sollten, nämlich die__setitem__
Methode. Hier ist ein Beispiel, wie man die__setitem__
Methode verwenden kann, um einem ein Schlüssel-Wert-Paar hinzuzufügendict
, und eine Demonstration der schlechten Leistung bei der Verwendung:Wir sehen also, dass die Verwendung der tiefgestellten Notation tatsächlich viel schneller ist als die Verwendung
__setitem__
. Das Pythonische zu tun, dh die Sprache so zu verwenden, wie sie verwendet werden sollte, ist normalerweise sowohl lesbarer als auch rechnerisch effizienter.quelle
d.__setitem__
), obwohl die Schlussfolgerung (und insbesondere der letzte Satz) stichhaltig bleibt. Durch das Herausheben der Methodennamensuche aus der Schleife wurde die Zeit auf ca. 1,65 ms reduziert. Der verbleibende Unterschied ist wahrscheinlich größtenteils auf den unvermeidbaren Overhead des Python-Aufrufmechanismus zurückzuführen.quelle
Wenn Sie ein Wörterbuch zu einem Wörterbuch hinzufügen möchten, können Sie dies auf diese Weise tun.
Beispiel: Fügen Sie Ihrem Wörterbuch und Unterwörterbuch einen neuen Eintrag hinzu
Ausgabe:
HINWEIS: Für Python müssen Sie zuerst ein Sub hinzufügen
vor dem Hinzufügen von Einträgen.
quelle
dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}}
(oder wenndictionary
es bereits ein Diktat istdictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}
)Die orthodoxe Syntax lautet
d[key] = value
, aber wenn auf Ihrer Tastatur die eckigen Klammern fehlen, können Sie Folgendes tun:Durch Definieren
__getitem__
und__setitem__
Methoden können Sie festlegen, dass Ihre eigene Klasse die Syntax in eckigen Klammern unterstützt. Siehe https://python.developpez.com/cours/DiveIntoPython/php/endiveintopython/object_oriented_framework/special_class_methods.phpquelle
[a for a in my_dict if my_dict.update({'a': 1}) is None]
.{v: k for k, v in my_dict.items() if <some_conditional_check>}
Sie können eine erstellen:
Gibt:
quelle
Diese beliebte Frage befasst sich mit funktionalen Methoden zum Zusammenführen von Wörterbüchern
a
undb
.Hier sind einige der einfacheren Methoden (getestet in Python 3) ...
Hinweis: Die erste Methode oben funktioniert nur, wenn die Schlüssel
b
Zeichenfolgen sind.Um ein einzelnes Element hinzuzufügen oder zu ändern , enthält das
b
Wörterbuch nur dieses eine Element ...Dies entspricht ...
quelle
c = dict( a, **{'d':'dog'} )
wäre besser geschrieben alsc = dict(a, d='dog')
, solange Schlüssel bekannt und nicht berechnet sind.Stellen wir uns vor, Sie möchten in der unveränderlichen Welt leben und das Original NICHT ändern, sondern ein neues erstellen
dict
, das das Ergebnis des Hinzufügens eines neuen Schlüssels zum Original ist.In Python 3.5+ können Sie Folgendes tun:
Das Python 2-Äquivalent lautet:
Nach einem dieser Punkte:
params
ist immer noch gleich{'a': 1, 'b': 2}
und
new_params
entspricht{'a': 1, 'b': 2, 'c': 3}
Es wird Zeiten geben, in denen Sie das Original nicht ändern möchten (Sie möchten nur das Ergebnis des Hinzufügens zum Original). Ich finde das eine erfrischende Alternative zu Folgendem:
oder
Referenz: https://stackoverflow.com/a/2255892/514866
quelle
**
Python nicht vertraut ist (viele nicht), es nicht offensichtlich ist, was los ist. Es gibt Zeiten, in denen Sie einen weniger funktionalen Ansatz für eine bessere Lesbarkeit bevorzugen.So viele Antworten und trotzdem vergaßen alle die seltsam benannten, seltsam benommenen und dennoch handlichen
dict.setdefault()
Diese
macht im Grunde nur das:
z.B
quelle
Wenn Sie nicht zwei Wörterbücher verbinden, sondern einem Wörterbuch neue Schlüssel-Wert-Paare hinzufügen, ist die Verwendung der tiefgestellten Notation der beste Weg.
Wenn Sie jedoch beispielsweise Tausende neuer Schlüssel-Wert-Paare hinzufügen möchten, sollten Sie die Verwendung der
update()
Methode in Betracht ziehen .quelle
Ich denke, es wäre auch nützlich, auf Pythons
collections
Modul hinzuweisen, das aus vielen nützlichen Wörterbuchunterklassen und Wrappern besteht, die das Hinzufügen und Ändern von Datentypen in einem Wörterbuch vereinfachen , insbesonderedefaultdict
:Dies ist besonders nützlich, wenn Sie mit Wörterbüchern arbeiten, die immer aus denselben Datentypen oder Strukturen bestehen, z. B. einem Listenwörterbuch.
Wenn der Schlüssel noch nicht vorhanden ist,
defaultdict
weist10
er dem Wörterbuch den angegebenen Wert (in unserem Fall ) als Anfangswert zu (häufig in Schleifen verwendet). Diese Operation führt daher zwei Dinge aus: Sie fügt einem Wörterbuch einen neuen Schlüssel hinzu (gemäß Frage) und weist den Wert zu, wenn der Schlüssel noch nicht vorhanden ist. Beim Standardwörterbuch hätte dies einen Fehler ausgelöst, da die+=
Operation versucht, auf einen Wert zuzugreifen, der noch nicht vorhanden ist:Ohne die Verwendung von wäre
defaultdict
die Menge an Code zum Hinzufügen eines neuen Elements viel größer und sieht möglicherweise ungefähr so aus:defaultdict
kann auch mit komplexen Datentypen wielist
und verwendet werdenset
:Durch Hinzufügen eines Elements wird die Liste automatisch initialisiert.
quelle
Hier ist ein anderer Weg, den ich hier nicht gesehen habe:
Sie können den Wörterbuchkonstruktor und die implizite Erweiterung verwenden, um ein Wörterbuch zu rekonstruieren. Interessanterweise kann diese Methode außerdem verwendet werden, um die Positionsreihenfolge während der Wörterbuchkonstruktion zu steuern ( nach Python 3.6 ). Tatsächlich ist die Einfügereihenfolge für Python 3.7 und höher garantiert!
Das obige verwendet das Wörterbuchverständnis.
quelle
Überprüfen Sie zunächst, ob der Schlüssel bereits vorhanden ist
Dann können Sie den neuen Schlüssel und Wert hinzufügen
quelle
Wörterbuchschlüssel, Wertklasse hinzufügen.
quelle