Domanda Aggiungi nuove chiavi a un dizionario?


È possibile aggiungere una chiave a un dizionario Python dopo che è stata creata? Non sembra avere un .add() metodo.


1904
2018-06-21 22:07


origine


risposte:


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

851
2017-07-22 14:48



Mi sento come il consolidamento delle informazioni sui dizionari Python:

Creare un dizionario vuoto

data = {}
# OR
data = dict()

Creazione di un dizionario con valori iniziali

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

Inserimento / Aggiornamento di un singolo valore

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)

Inserimento / Aggiornamento di più valori

data.update({'c':3,'d':4})  # Updates 'c' and adds 'd'

Creazione di un dizionario unito senza modificare gli originali

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

Eliminazione di elementi nel dizionario

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

Controlla se una chiave è già nel dizionario

key in data

Scorrere le coppie in un dizionario

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

Crea un dizionario da 2 liste

data = dict(zip(list_with_keys, list_with_values))

Sentiti libero di aggiungere altro!


583
2017-12-05 06:07



Sì, è abbastanza facile. Basta fare quanto segue:

dict["key"] = "value"

132
2018-06-21 22:09



"È possibile aggiungere una chiave a un dizionario Python dopo che è stata creata? Non sembra che abbia un metodo .add ()."

Sì, è possibile, e ha un metodo che implementa questo, ma tu non vuoi usarlo direttamente.

Per dimostrare come e come non usarlo, creiamo un dict vuoto con il dict letteral, {}:

my_dict = {}

Best Practice 1: notazione degli abbonati

Per aggiornare questo dict con una sola nuova chiave e valore, puoi usare la notazione del pedice (vedi Mappature qui) che prevede l'assegnazione degli articoli:

my_dict['new key'] = 'new value'

my_dict è ora:

{'new key': 'new value'}

Best Practice 2: The update metodo - 2 modi

Possiamo anche aggiornare il dict con più valori in modo efficiente anche utilizzando il update metodo. Potremmo creare inutilmente un extra dict qui, quindi speriamo nostro dict è già stato creato e proviene o è stato utilizzato per un altro scopo:

my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'})

my_dict è ora:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'}

Un altro modo efficace di fare questo con il metodo di aggiornamento è con gli argomenti delle parole chiave, ma poiché devono essere parole python legittime, non puoi avere spazi o simboli speciali o iniziare il nome con un numero, ma molti considerano questo un modo più leggibile creare le chiavi per un dict, e qui evitiamo sicuramente di creare un extra inutile dict:

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

e my_dict è ora:

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

Quindi ora abbiamo coperto tre modi pittonici di aggiornamento a dict.


Metodo magico, __setitem__e perché dovrebbe essere evitato

C'è un altro modo di aggiornare a dict che non dovresti usare, che usa il __setitem__ metodo. Ecco un esempio di come si potrebbe usare il __setitem__ metodo per aggiungere una coppia chiave-valore a a dicte una dimostrazione delle scarse prestazioni del suo utilizzo:

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

Quindi vediamo che l'uso della notazione del pedice è in realtà molto più veloce dell'uso __setitem__. Fare la cosa pitonica, cioè usare la lingua nel modo in cui era intesa per essere usata, di solito è sia più leggibile che efficiente dal punto di vista computazionale.


105
2017-11-29 23:57



dictionary[key] = value

73
2018-06-21 22:08



Se vuoi aggiungere un dizionario all'interno di un dizionario, puoi farlo in questo modo.

Esempio: aggiungi una nuova voce al tuo dizionario e sottotitolo

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)

Produzione:

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

NOTA: Python richiede che tu prima aggiunga un sub

dictionary["dictionary_within_a_dictionary"] = {}

prima di aggiungere voci.


44
2018-04-26 19:04