Wie füge ich einen Schlüssel zu einem bestehenden Wörterbuch hinzu? Es hat keine .add()
Methode.
Antworten
Zu viele Anzeigen?Es gibt auch das seltsam benannte, seltsam anmutende und doch so praktische dict.setdefault()
.
Diese
value = my_dict.setdefault(key, default)
macht im Grunde nur dies:
try:
value = my_dict[key]
except KeyError: # key not found
value = my_dict[key] = default
Z.B.,
>>> mydict = {'a':1, 'b':2, 'c':3}
>>> mydict.setdefault('d', 4)
4 # returns new value at mydict['d']
>>> print(mydict)
{'a':1, 'b':2, 'c':3, 'd':4} # a new key/value pair was indeed added
# but see what happens when trying it on an existing key...
>>> mydict.setdefault('a', 111)
1 # old value was returned
>>> print(mydict)
{'a':1, 'b':2, 'c':3, 'd':4} # existing key was ignored
Diese Frage ist bereits bis zum Überdruss beantwortet worden, aber da meine Kommentar hat viel Anklang gefunden, hier ist die Antwort:
Hinzufügen neuer Schlüssel, ohne das bestehende Diktat zu aktualisieren
Wenn Sie hier versuchen, herauszufinden, wie Sie einen Schlüssel hinzufügen und eine nuevo Wörterbuch zu erstellen (ohne das bestehende zu ändern), können Sie dies mit den folgenden Techniken tun
python >= 3.5
new_dict = {**mydict, 'new_key': new_val}
python < 3.5
new_dict = dict(mydict, new_key=new_val)
Beachten Sie, dass Ihr Schlüssel bei diesem Ansatz der Regeln für gültige Bezeichnernamen in Python.
Wenn Sie nicht zwei Wörterbücher verbinden, sondern einem Wörterbuch neue Schlüssel-Wert-Paare hinzufügen, scheint die tiefgestellte Notation der beste Weg zu sein.
import timeit
timeit.timeit('dictionary = {"karga": 1, "darga": 2}; dictionary.update({"aaa": 123123, "asd": 233})')
>> 0.49582505226135254
timeit.timeit('dictionary = {"karga": 1, "darga": 2}; dictionary["aaa"] = 123123; dictionary["asd"] = 233;')
>> 0.20782899856567383
Wenn Sie jedoch zum Beispiel Tausende von neuen Schlüssel-Wert-Paaren hinzufügen möchten, sollten Sie die Option update()
Methode.
Es gibt noch eine andere Möglichkeit, die ich hier nicht gesehen habe:
>>> foo = dict(a=1,b=2)
>>> foo
{'a': 1, 'b': 2}
>>> goo = dict(c=3,**foo)
>>> goo
{'c': 3, 'a': 1, 'b': 2}
Sie können den Wörterbuchkonstruktor und die implizite Expansion verwenden, um ein Wörterbuch zu rekonstruieren. Interessanterweise kann diese Methode auch dazu verwendet werden, die Reihenfolge der Positionen während der Wörterbuchkonstruktion zu kontrollieren ( nach Python 3.6 ). Tatsächlich ist die Einfügereihenfolge für Python 3.7 und höher garantiert!
>>> foo = dict(a=1,b=2,c=3,d=4)
>>> new_dict = {k: v for k, v in list(foo.items())[:2]}
>>> new_dict
{'a': 1, 'b': 2}
>>> new_dict.update(newvalue=99)
>>> new_dict
{'a': 1, 'b': 2, 'newvalue': 99}
>>> new_dict.update({k: v for k, v in list(foo.items())[2:]})
>>> new_dict
{'a': 1, 'b': 2, 'newvalue': 99, 'c': 3, 'd': 4}
>>>
Die obigen Ausführungen beziehen sich auf das Verständnis des Wörterbuchs.
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í .