Hinzufügen neuer Schlüssel zu einem Wörterbuch?
-
06-07-2019 - |
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.
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
Modifizierendata3 = {}
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})
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