Frage Hinzufügen neuer Schlüssel zu einem Wörterbuch?


Ist es möglich, nach der Erstellung eines Python-Wörterbuchs einen Schlüssel hinzuzufügen? Es scheint kein zu haben .add() Methode.


1904
2018-06-21 22:07


Ursprung


Antworten:


>>> d = {'key':'value'}
>>> print(d)
{'key': 'value'}
>>> d['mynewkey'] = 'mynewvalue'
>>> print(d)
{'mynewkey': 'mynewvalue', 'key': 'value'}

2510
2018-06-21 22:09



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

>>> x.update({3:4})
>>> print x
{1: 2, 3: 4}

850
2017-07-22 14:48



Ich habe das Gefühl, Informationen über Python-Wörterbücher zu konsolidieren:

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'

Erstellen eines zusammengeführten Wörterbuchs, ohne die Originale zu ändern

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

Einträge im Wörterbuch löschen

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

Überprüfen Sie, ob sich ein Schlüssel bereits im Wörterbuch befindet

key in data

Iterate 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 Sie ein Wörterbuch aus 2 Listen

data = dict(zip(list_with_keys, list_with_values))

Fühlen Sie sich frei, mehr hinzuzufügen!


583
2017-12-05 06:07



Ja, es ist ziemlich einfach. Mach einfach folgendes:

dict["key"] = "value"

132
2018-06-21 22:09



"Ist es möglich, nach der Erstellung eines Python-Wörterbuchs einen Schlüssel hinzuzufügen? Es scheint keine .add () -Methode zu haben."

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

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

my_dict = {}

Best Practice 1: Tiefgestellte Notation

Um dieses Diktat mit einem einzigen neuen Schlüssel und Wert zu aktualisieren, können Sie verwenden die tiefgestellte Notation (siehe Mappings hier) das bietet für die Artikelvergabe:

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 mit mehreren Werten effizient aktualisieren das update Methode. Wir schaffen unnötigerweise ein Extra dict hier, so hoffen wir unsere dict wurde bereits erstellt und kam aus oder wurde für einen anderen Zweck verwendet:

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 weiterer effizienter Weg, dies mit der update-Methode zu tun, ist mit Schlüsselwortargumenten, aber da es sich um legitime Pythonwörter handeln muss, können Sie keine Leerzeichen oder Sonderzeichen haben oder den Namen mit einer Zahl beginnen, aber viele halten dies für eine besser lesbare Methode um Schlüssel für ein Diktat zu erstellen, und hier vermeiden wir sicherlich, dass ein Extra überflüssig wird dict:

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

und my_dict ist jetzt:

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

So haben wir nun drei pythonische Arten der Aktualisierung von a behandelt dict.


Magische Methode, __setitem__und warum sollte es vermieden werden

Es gibt eine andere Möglichkeit, ein Update durchzuführen dict das solltest du nicht verwenden, das nutzt das __setitem__ Methode. Hier ist ein Beispiel, wie man das benutzen könnte __setitem__ Methode zum Hinzufügen eines Schlüssel / Wert-Paares zu a dictund eine Demonstration der schlechten Leistung der Verwendung:

>>> 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 Indexnotation tatsächlich viel schneller ist als die Verwendung __setitem__. Das Pythonic-Ding zu machen, das heißt, die Sprache so zu verwenden, wie sie verwendet werden sollte, ist normalerweise sowohl lesbarer als auch recheneffizienter.


105
2017-11-29 23:57



dictionary[key] = value

73
2018-06-21 22:08



Wenn Sie ein Wörterbuch in einem Wörterbuch hinzufügen möchten, können Sie dies auf diese Weise tun.

Beispiel: Fügen Sie Ihrem Wörterbuch & Unterwörterbuch einen neuen Eintrag hinzu

dictionary = {}
dictionary["new key"] = "some new entry" # add new dictionary entry
dictionary["dictionary_within_a_dictionary"] = {} # this is required by python
dictionary["dictionary_within_a_dictionary"]["sub_dict"] = {"other" : "dictionary"}
print (dictionary)

Ausgabe:

{'new key': 'some new entry', 'dictionary_within_a_dictionary': {'sub_dict': {'other': 'dictionarly'}}}

HINWEIS: Python erfordert, dass Sie zuerst eine Untergruppe hinzufügen

dictionary["dictionary_within_a_dictionary"] = {}

bevor Sie Einträge hinzufügen.


44
2018-04-26 19:04



Die orthodoxe Syntax ist d[key] = value, aber wenn auf Ihrer Tastatur die eckigen Klammertasten fehlen, können Sie Folgendes tun:

d.__setitem__(key, value)

In der Tat, definieren __getitem__ und __setitem__ Methoden ist, wie Sie Ihre eigene Klasse die eckige Klammer Syntax unterstützen können. Sehen http://www.diveintopython.net/object_oriented_framework/special_class_methods.html


31
2018-04-14 00:58