Voglio cambiare la chiave di una voce in un dizionario Python.
C'è un modo semplice per farlo?
Voglio cambiare la chiave di una voce in un dizionario Python.
C'è un modo semplice per farlo?
Risposte:
Facilmente eseguito in 2 passaggi:
dictionary[new_key] = dictionary[old_key]
del dictionary[old_key]
O in 1 passaggio:
dictionary[new_key] = dictionary.pop(old_key)
che aumenterà KeyError
se dictionary[old_key]
non è definito. Si noti che questo si elimina dictionary[old_key]
.
>>> dictionary = { 1: 'one', 2:'two', 3:'three' }
>>> dictionary['ONE'] = dictionary.pop(1)
>>> dictionary
{2: 'two', 3: 'three', 'ONE': 'one'}
>>> dictionary['ONE'] = dictionary.pop(1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 1
dict[new_value] = dict.pop(old_value, some_default_value)
evitarlo
old_key
sarà diversa dalla posizione di new_key
.
se vuoi cambiare tutte le chiavi:
d = {'x':1, 'y':2, 'z':3}
d1 = {'x':'a', 'y':'b', 'z':'c'}
In [10]: dict((d1[key], value) for (key, value) in d.items())
Out[10]: {'a': 1, 'b': 2, 'c': 3}
se si desidera modificare la chiave singola: è possibile scegliere uno dei suggerimenti sopra indicati.
{ d1[key] : value for key, value in d.items() }
In Python 2.7 e versioni successive, puoi usare la comprensione del dizionario: questo è un esempio che ho riscontrato durante la lettura di un CSV usando un DictReader. L'utente aveva suffisso tutti i nomi delle colonne con ':'
ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}
per sbarazzarsi del finale ":" nelle chiavi:
corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }
Poiché le chiavi sono utilizzate dai dizionari per la ricerca dei valori, non è possibile modificarli. La cosa più vicina che puoi fare è salvare il valore associato alla chiave precedente, eliminarlo, quindi aggiungere una nuova voce con la chiave sostitutiva e il valore salvato. Molte delle altre risposte illustrano diversi modi in cui ciò può essere realizzato.
Per convertire tutte le chiavi nel dizionario
Supponiamo che questo sia il tuo dizionario:
>>> sample = {'person-id': '3', 'person-name': 'Bob'}
Per convertire tutti i trattini in caratteri di sottolineatura nella chiave del dizionario di esempio:
>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}
d = {1:2,3:4}
supponiamo di voler cambiare le chiavi con gli elementi della lista p = ['a', 'b']. farà il seguente codice:
d=dict(zip(p,list(d.values())))
e otteniamo
{'a': 2, 'b': 4}
È possibile associare lo stesso valore a più chiavi o semplicemente rimuovere una chiave e aggiungere nuovamente una nuova chiave con lo stesso valore.
Ad esempio, se hai i tasti-> valori:
red->1
blue->2
green->4
non c'è motivo per cui non è possibile aggiungere purple->2
o rimuovere red->1
e aggiungereorange->1
In caso di modifica di tutti i tasti contemporaneamente. Qui sto eliminando le chiavi.
a = {'making' : 1, 'jumping' : 2, 'climbing' : 1, 'running' : 2}
b = {ps.stem(w) : a[w] for w in a.keys()}
print(b)
>>> {'climb': 1, 'jump': 2, 'make': 1, 'run': 2} #output
Non ho visto questa risposta esatta:
dict['key'] = value
Puoi persino farlo per attribuire gli attributi. Trasformali in un dizionario facendo questo:
dict = vars(obj)
Quindi puoi manipolare gli attributi dell'oggetto come faresti con un dizionario:
dict['attribute'] = value