Cambia il nome di una chiave nel dizionario


Risposte:


715

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

59
Questo genererà un KeyError in entrambi i casi se la chiave non esiste, ma potresti dict[new_value] = dict.pop(old_value, some_default_value)evitarlo
Tobias Kienzler

2
Notare che ciò influirebbe anche sulla posizione della chiave in CPython 3.6+ / Pypy e Python 3.7+. Cioè, in generale, la posizione di old_keysarà diversa dalla posizione di new_key.
norok2

63

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.


3
Questo crea un nuovo dizionario anziché aggiornarne uno esistente, il che potrebbe non essere importante, ma non è quello che è stato chiesto.
martineau,

15
Stessa risposta con una comprensione del dizionario:{ d1[key] : value for key, value in d.items() }
Morwenn,

35

pop'n'fresh

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 

26

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


"AttributeError: l'oggetto 'dict' non ha attributi 'sostituisci'"
user1318135

2
user1318125, suggerirei di provare a copiare e incollare. Questo funziona per me nella console di Python (il .replace viene eseguito sulla stringa utilizzata come chiave)
north.mister

7

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.


5

Se hai un dict complesso, significa che c'è un dict o un elenco all'interno del dict:

myDict = {1:"one",2:{3:"three",4:"four"}}
myDict[2][5] = myDict[2].pop(4)
print myDict

Output
{1: 'one', 2: {3: 'three', 5: 'four'}}

4

Nessun modo diretto per farlo, ma è possibile eliminare-quindi-assegnare

d = {1:2,3:4}

d[newKey] = d[1]
del d[1]

o apportare modifiche ai tasti di massa:

d = dict((changeKey(k), v) for k, v in d.items())

2
d = { changeKey(k): v for k, v in d.items()}
Erich,

4

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

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

0

È 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->2o rimuovere red->1e aggiungereorange->1


0

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

-3

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

1
Non vedo come questo sia legato alla domanda; potresti per favore elaborare?
apraetor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.