3552 Stimmen

Wie kann ich neue Schlüssel zu einem Wörterbuch hinzufügen?

Wie füge ich einen Schlüssel zu einem bestehenden Wörterbuch hinzu? Es hat keine .add() Methode.

0 Stimmen

Entweder verwenden Sie die akzeptierte Antwort: d['mynewkey'] = 'mynewvalue' oder Sie können val = d.setdefault('mynewkey', 'mynewvalue') verwenden.

2 Stimmen

Wenn Sie einfach <Wörterbuch>[<Schlüssel>] = <Wert> verwenden und der Schlüssel nicht existiert, wird er automatisch hinzugefügt.

2 Stimmen

Re @cs95, dies erzeugt auch ein neues Diktat mit einem zusätzlichen Schlüssel: dict(existing_dict, new_key=new_val) per stackoverflow.com/a/46647897/1840471

4409voto

Paolo Bergantino Punkte 465120

Sie erstellen ein neues Schlüssel/Wert-Paar in einem Wörterbuch, indem Sie diesem Schlüssel einen Wert zuweisen

d = {'key': 'value'}
print(d)  # {'key': 'value'}

d['mynewkey'] = 'mynewvalue'

print(d)  # {'key': 'value', 'mynewkey': 'mynewvalue'}

Wenn der Schlüssel nicht vorhanden ist, wird er hinzugefügt und verweist auf diesen Wert. Wenn er existiert, wird der aktuelle Wert, auf den er zeigt, überschrieben.

40 Stimmen

Was ist der Unterschied zwischen diesem und dem .update() Methode? Welche ist wann besser?

37 Stimmen

@hegash der d[key]=val Syntax, da sie kürzer ist und jedes Objekt als Schlüssel verwenden kann (solange es hashfähig ist) und nur einen Wert festlegt, während die .update(key1=val1, key2=val2) ist besser geeignet, wenn Sie mehrere Werte gleichzeitig setzen wollen, solange die Schlüssel Strings sind (da kwargs in Strings konvertiert werden). dict.update kann auch ein anderes Wörterbuch nehmen, aber ich persönlich ziehe es vor, nicht explizit ein neues Wörterbuch zu erstellen, um ein anderes zu aktualisieren.

0 Stimmen

Wie kann ich ein Element in einem verschachtelten Diktat hinzufügen. Wie php $foo[ ] = [ . . . . ]

1327voto

Yugal Jindle Punkte 41559

Ich fühle mich wie die Konsolidierung von Informationen über Python-Wörterbücher:

Erstellen eines leeren Wörterbuchs

data = {}
# OR
data = dict()

Erstellen eines Wörterbuchs mit Anfangswerten

data = {'a': 1, 'b': 2, 'c': 3}
# OR
data = dict(a=1, b=2, c=3)
# OR
data = {k: v for k, v in (('a', 1), ('b',2), ('c',3))}

Einfügen/Aktualisieren eines einzelnen Wertes

data['a'] = 1  # Updates if 'a' exists, else adds 'a'
# OR
data.update({'a': 1})
# OR
data.update(dict(a=1))
# OR
data.update(a=1)

Einfügen/Aktualisieren mehrerer Werte

data.update({'c':3,'d':4})  # Updates 'c' and adds 'd'

Python 3.9+:

Le site Update-Operator |= funktioniert jetzt auch bei Wörterbüchern:

data |= {'c':3,'d':4}

Erstellen eines zusammengeführten Wörterbuchs ohne Änderung der Originale

data3 = {}
data3.update(data)  # Modifies data3, not data
data3.update(data2)  # Modifies data3, not data2

Python 3.5+:

Dabei wird eine neue Funktion namens Auspacken des Wörterbuchs .

data = {**data1, **data2, **data3}

Python 3.9+:

Le site Mischungsoperator | funktioniert jetzt auch bei Wörterbüchern:

data = data1 | {'c':3,'d':4}

Löschen von Einträgen im Wörterbuch

del data[key]  # Removes specific element in a dictionary
data.pop(key)  # Removes the key & returns the value
data.clear()  # Clears entire dictionary

Prüfen, ob ein Schlüssel bereits im Wörterbuch enthalten ist

key in data

Iterieren durch Paare in einem Wörterbuch

for key in data: # Iterates just through the keys, ignoring the values
for key, value in d.items(): # Iterates through the pairs
for key in d.keys(): # Iterates just through key, ignoring the values
for value in d.values(): # Iterates just through value, ignoring the keys

Erstellen eines Wörterbuchs aus zwei Listen

data = dict(zip(list_with_keys, list_with_values))

1 Stimmen

Der "OR"-Operator | in 3.9 scheint mein Problem mit Python-Dicts zu lösen, die kein Builder-Muster haben.

1 Stimmen

Es wäre gut, für die verschiedenen Optionen von "einen Eintrag aktualisieren" zu erwähnen, dass die Optionen mit "aktualisieren" den Overhead haben, ein temporäres Wörterbuch zu erstellen.

1233voto

Um mehrere Schlüssel gleichzeitig hinzuzufügen, verwenden Sie dict.update() :

>>> x = {1:2}
>>> print(x)
{1: 2}

>>> d = {3:4, 5:6, 7:8}
>>> x.update(d)
>>> print(x)
{1: 2, 3: 4, 5: 6, 7: 8}

Bei der Hinzufügung eines einzigen Schlüssels hat die akzeptierte Antwort einen geringeren Berechnungsaufwand.

22 Stimmen

Das ist soooo ineffizient, ein Wörterbuch zu erstellen, nur um einen Schlüssel zu aktualisieren. Tun Sie dies nur, wenn Sie mehr als 1 Schlüssel haben (es kann einen Schwellenwert geben, ab dem es besser ist, ein Diktat zu erstellen)

25 Stimmen

@Jean-FrançoisFabre Dies ist ein Beispielcode. Sie sollten nicht davon ausgehen, dass die Antworten alle Fälle abdecken.

4 Stimmen

Es wird der falsche Eindruck erweckt, dass dies die bevorzugte Methode zum Hinzufügen eines Schlüssels ist.

173voto

"Ist es möglich, einen Schlüssel zu einem Python-Wörterbuch hinzuzufügen, nachdem es erstellt worden ist? Es scheint keine .add()-Methode zu haben."

Ja, das ist möglich, und es gibt auch eine Methode, die dies implementiert, aber Sie sollten sie nicht direkt verwenden.

Um zu demonstrieren, wie man es verwendet und wie man es nicht verwendet, erstellen wir ein leeres Diktat mit dem Diktat-Literal, {} :

my_dict = {}

Bewährte Praxis 1: Tiefgestellte Schreibweise

Um dieses Diktat mit einem einzigen neuen Schlüssel und Wert zu aktualisieren, können Sie die tiefgestellte Notation (siehe Mappings hier) die eine Positionszuordnung vorsieht:

my_dict['new key'] = 'new value'

my_dict ist jetzt:

{'new key': 'new value'}

Best Practice 2: Die update Methode - 2 Möglichkeiten

Wir können das Diktat auch effizient mit mehreren Werten aktualisieren, indem wir die update Methode . Möglicherweise schaffen wir unnötigerweise eine zusätzliche dict Hier hoffen wir, dass unsere dict bereits geschaffen wurde und aus einem anderen Zweck stammt oder für einen anderen Zweck verwendet wurde:

my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'})

my_dict ist jetzt:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'}

Ein anderer effizienter Weg, dies mit der Update-Methode zu tun, ist die Verwendung von Schlüsselwort-Argumenten, aber da es sich dabei um legitime Python-Wörter handeln muss, können Sie keine Leerzeichen oder Sonderzeichen verwenden oder den Namen mit einer Zahl beginnen, aber viele halten dies für einen lesbareren Weg, um Schlüssel für ein Diktat zu erstellen, und hier vermeiden wir sicherlich die Erstellung eines zusätzlichen unnötigen dict :

my_dict.update(foo='bar', foo2='baz')

my_dict ist jetzt:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value', 
 'foo': 'bar', 'foo2': 'baz'}

Wir haben nun drei pythonische Methoden zur Aktualisierung einer dict .


Magische Methode, __setitem__ und warum sie vermieden werden sollte

Es gibt eine weitere Möglichkeit, eine dict die Sie nicht verwenden sollten, da sie die __setitem__ Methode. Hier ist ein Beispiel für die Verwendung der Methode __setitem__ Methode, um ein Schlüssel-Wert-Paar zu einer dict und eine Demonstration der schlechten Leistung bei der Verwendung dieser Methode:

>>> d = {}
>>> d.__setitem__('foo', 'bar')
>>> d
{'foo': 'bar'}

>>> def f():
...     d = {}
...     for i in xrange(100):
...         d['foo'] = i
... 
>>> def g():
...     d = {}
...     for i in xrange(100):
...         d.__setitem__('foo', i)
... 
>>> import timeit
>>> number = 100
>>> min(timeit.repeat(f, number=number))
0.0020880699157714844
>>> min(timeit.repeat(g, number=number))
0.005071878433227539

Wir sehen also, dass die Verwendung der tiefgestellten Notation tatsächlich viel schneller ist als die Verwendung von __setitem__ . Wenn man sich an Python orientiert, d. h. die Sprache so verwendet, wie sie ursprünglich gedacht war, ist sie in der Regel sowohl lesbarer als auch rechnerisch effizienter.

1 Stimmen

Im Jahr 2020 ist der Unterschied weniger ausgeprägt (auf meinem Rechner: 1,35 ms für die Tiefstellung gegenüber 2 ms für d.__setitem__ ), obwohl die Schlussfolgerung (und insbesondere der letzte Satz) solide ist. Die Auslagerung der Suche nach dem Methodennamen aus der Schleife reduzierte die Zeit auf etwa 1,65 ms; die verbleibende Differenz ist wahrscheinlich größtenteils auf den unvermeidlichen Overhead des Python-Aufrufmechanismus zurückzuführen.

125voto

Jason Creighton Punkte 20129
dictionary[key] = value

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