Frage

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

War es hilfreich?

Lösung

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

Andere Tipps

Um mehrere Tasten gleichzeitig hinzufügen:

>>> 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}

Für einen Schlüssel hinzufügen, die akzeptierte Antwort hat weniger Rechenaufwand.

Ich fühle mich wie info Konsolidierung über Python Wörterbücher:

Erstellen eines leeren Wörterbuch

data = {}
# OR
data = dict()

Erstellen eines Wörterbuchs mit den 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 einzelner Wert

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'

eine fusionierte Wörterbuch erstellen ohne Vorlagen

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

Löschen von Elementen 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

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

key in data

Iteration 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 von 2 Listen

data = dict(zip(list_with_keys, list_with_values))

Sie können ferner mehr hinzuzufügen!

  

„Ist es möglich, einen Schlüssel zu einem Python-Wörterbuch hinzuzufügen, nachdem es erstellt wurde? Es scheint nicht einen .add () -Methode zu haben.“

Ja, es ist möglich, und es hat eine Methode, die diese implementiert, aber sie wollen es nicht direkt verwenden.

Um zu zeigen, wie und wie es nicht zu benutzen, lassen Sie sich einen leeren dict mit dem dict wörtlichen, {} erstellen:

my_dict = {}

Best Practice 1: Index-Notation

Dieses dict So aktualisieren Sie mit einem einzigen neuen Schlüssel und den Wert, können Sie der Index-Notation (siehe Mappings hier) , die für Artikel Zuordnung lautet:

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 auch die dict mit mehreren Werten aktualisieren effizient als auch mit die update Methode . Wir unnötig werden können, hier eine zusätzliche dict zu schaffen, so dass wir hoffen, dass unsere dict bereits erstellt wurde 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'}

Eine weitere effiziente Möglichkeit, dies mit der Update-Methode zu tun, ist mit Keyword-Argumente, aber da sie legitime Python Worte sein müssen, können Sie keine Leerzeichen oder Sonderzeichen oder den Namen mit einer Zahl beginnen, aber viele halten dies für eine lesbare Weise Schlüssel für eine dict, zu schaffen und hier sicherlich vermeiden wir eine zusätzliche unnötige dict erstellen:

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, jetzt haben wir drei Pythonic Möglichkeiten der Aktualisierung eines dict abgedeckt.


Magie Methode, __setitem__, und warum es sollte vermieden werden,

Es gibt einen anderen Weg, um eine dict der Aktualisierung, dass Sie sollten nicht verwendet werden, die die __setitem__ Methode verwendet. Hier ist ein Beispiel dafür, wie man könnte die __setitem__ Methode verwenden, um ein Schlüssel-Wert-Paar zu einem dict, und eine Demonstration der schlechten Leistung des Verwendens es hinzuzufügen:

>>> 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

So sehen wir, dass die Index-Notation ist eigentlich viel schneller als __setitem__ verwenden. die Pythonic Sache zu tun, das heißt, die Sprache, in der Art und Weise mit ihm verwendet werden soll, und zwar üblicherweise sowohl besser lesbar und rechnerisch effizient.

dictionary[key] = value

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

Beispiel: Fügen Sie einen neuen Eintrag zu Ihrem Wörterbuch & sub Wörterbuch

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)

Ausgang:

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

Hinweis: Python erfordert, dass Sie zuerst einen Unter hinzufügen

dictionary["dictionary_within_a_dictionary"] = {}

vor Einträge hinzugefügt.

Die orthodoxe Syntax ist d[key] = value, aber wenn Ihre Tastatur ist die eckige Klammer Schlüssel fehlt Sie tun können:

d.__setitem__(key, value)

In der Tat, __getitem__ und __setitem__ Methoden zu definieren ist, wie Sie Ihre eigene Klasse Unterstützung der eckige Klammer Syntax machen können. Siehe https://python.developpez.com/cours/DiveIntoPython /php/endiveintopython/object_oriented_framework/special_class_methods.php

können Sie erstellen ein

class myDict(dict):

    def __init__(self):
        self = dict()

    def add(self, key, value):
        self[key] = value

## example

myd = myDict()
myd.add('apples',6)
myd.add('bananas',3)
print(myd)

gibt

>>> 
{'apples': 6, 'bananas': 3}

Die beliebte Frage Adressen funktionelle Methoden der Wörterbücher a und b verschmelzen.

Hier sind einige der einfachen Methoden (getestet in Python 3) ...

c = dict( a, **b ) ## see also https://stackoverflow.com/q/2255878
c = dict( list(a.items()) + list(b.items()) )
c = dict( i for d in [a,b] for i in d.items() )

Hinweis: Die erste Methode, die oben nur funktioniert, wenn die Schlüssel in b Strings

.

hinzufügen oder ein einzelnes Element ändern, würde das b Wörterbuch nur, dass ein Element enthalten ...

c = dict( a, **{'d':'dog'} ) ## returns a dictionary based on 'a'

Dies entspricht ...

def functional_dict_add( dictionary, key, value ):
   temp = dictionary.copy()
   temp[key] = value
   return temp

c = functional_dict_add( a, 'd', 'dog' )

Nehmen wir an, Sie in der unveränderlichen Welt leben wollen und wollen nicht das Original ändern, sondern eine neue dict erstellen möchten, ist das Ergebnis einen neuen Schlüssel zum Original hinzuzufügen.

In Python 3.5+ Sie tun können:

params = {'a': 1, 'b': 2}
new_params = {**params, **{'c': 3}}

Der Python 2 entspricht:

params = {'a': 1, 'b': 2}
new_params = dict(params, **{'c': 3})

Nach einer dieser beiden:

params noch gleich ist {'a': 1, 'b': 2}

und

new_params gleich {'a': 1, 'b': 2, 'c': 3}

Es wird Zeiten geben, wenn Sie nicht wollen, um das Original ändern (Sie wollen nur das Ergebnis auf den ursprünglichen Zugabe). Das finde ich eine erfrischende Alternative zu den folgenden:

params = {'a': 1, 'b': 2}
new_params = params.copy()
new_params['c'] = 3

oder

params = {'a': 1, 'b': 2}
new_params = params.copy()
new_params.update({'c': 3})

Referenz: https://stackoverflow.com/a/2255892/514866

So viele Antworten und noch alle vergessen haben, über den seltsamen Namen, seltsam benommen, und dennoch handlich dict.setdefault()

Das

value = my_dict.setdefault(key, default)

im Grunde nur tut dies:

try:
    value = my_dict[key]
except KeyError: # key not found
    value = my_dict[key] = default

z.

>>> 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

Wenn Sie nicht zwei Wörterbücher verbinden, aber das Hinzufügen neuer Schlüssel-Wert-Paare in einem Wörterbuch, dann die Index-Notation scheint die beste Art und Weise.

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 hinzufügen möchten, zum Beispiel Tausende neuer Schlüssel-Wert-Paare, sollten Sie die update() Methode in Betracht ziehen.

zunächst prüfen, ob der Schlüssel bereits vorhanden

a={1:2,3:4}
a.get(1)
2
a.get(5)
None

, dann können Sie den neuen Schlüssel und Wert

hinzufügen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top