Wie füge ich einen Schlüssel zu einem bestehenden Wörterbuch hinzu? Es hat keine .add()
Methode.
Was ist der Unterschied zwischen diesem und dem .update()
Methode? Welche ist wann besser?
Wie füge ich einen Schlüssel zu einem bestehenden Wörterbuch hinzu? Es hat keine .add()
Methode.
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.
Was ist der Unterschied zwischen diesem und dem .update()
Methode? Welche ist wann besser?
@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.
Wie kann ich ein Element in einem verschachtelten Diktat hinzufügen. Wie php $foo[ ] = [ . . . . ]
Ich fühle mich wie die Konsolidierung von Informationen über Python-Wörterbücher:
data = {}
# OR
data = dict()
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))}
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)
data.update({'c':3,'d':4}) # Updates 'c' and adds 'd'
Le site Update-Operator |=
funktioniert jetzt auch bei Wörterbüchern:
data |= {'c':3,'d':4}
data3 = {}
data3.update(data) # Modifies data3, not data
data3.update(data2) # Modifies data3, not data2
Dabei wird eine neue Funktion namens Auspacken des Wörterbuchs .
data = {**data1, **data2, **data3}
Le site Mischungsoperator |
funktioniert jetzt auch bei Wörterbüchern:
data = data1 | {'c':3,'d':4}
del data[key] # Removes specific element in a dictionary
data.pop(key) # Removes the key & returns the value
data.clear() # Clears entire dictionary
key in data
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
data = dict(zip(list_with_keys, list_with_values))
Der "OR"-Operator |
in 3.9 scheint mein Problem mit Python-Dicts zu lösen, die kein Builder-Muster haben.
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.
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)
@Jean-FrançoisFabre Dies ist ein Beispielcode. Sie sollten nicht davon ausgehen, dass die Antworten alle Fälle abdecken.
Es wird der falsche Eindruck erweckt, dass dies die bevorzugte Methode zum Hinzufügen eines Schlüssels ist.
"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 = {}
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'}
update
Methode - 2 MöglichkeitenWir 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
.
__setitem__
und warum sie vermieden werden sollteEs 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.
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.
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.
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/18404711 Stimmen
@MaxGhenis danke, das funktioniert gut für Python < 3.5 (mit einem Vorbehalt), ich habe eine Community-Wiki-Antwort hinzugefügt aquí .