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

27voto

Michael Ekoka Punkte 17537

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

24voto

cs95 Punkte 325143

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.

16voto

Pobaranchuk Punkte 675

Es gibt zwei Möglichkeiten, ein Wörterbuch zu aktualisieren:

  1. Verwenden Sie die Notation in eckigen Klammern ( [] )

    my_dict = {}
    my_dict['key'] = 'value'
  2. Verwenden Sie die update() Methode

    my_dict = {}
    my_dict.update({'key': 'value'})

11voto

Burak Özdemir Punkte 430

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.

10voto

ingyhere Punkte 10268

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.

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