
Questo articolo descrive come cambiare la chiave di un dizionario (dict) in Python.
- Aggiungi un nuovo elemento e quindi rimuovi quello vecchio
- Con del resoconto
- Con il metodo pop()
- Definire una funzione per cambiare la chiave di un dizionario
- Se la vecchia chiave non esiste, aggiungi un nuovo elemento
- Se la vecchia chiave non esiste, non fare nulla
Se si desidera cambiare il valore, è sufficiente specificare la chiave e assegnare un nuovo valore. Vedere il seguente articolo per i dettagli.
Aggiungi un nuovo elemento e quindi rimuovi quello vecchio
dict non ha un metodo per cambiare la chiave, quindi aggiungi un nuovo elemento con la nuova chiave e il valore originale, quindi rimuovi il vecchio elemento.
Per ulteriori informazioni su come rimuovere un elemento dal dizionario, vedere il seguente articolo
Con del resoconto
Se usi l’istruzione del, puoi fare quanto segue.
d = {'k1': 1, 'k2': 2, 'k3': 3}
d['k10'] = d['k1']
del d['k1']
print(d)
# {'k2': 2, 'k3': 3, 'k10': 1}
Con il metodo pop()
Il metodo pop() può essere utilizzato per rimuovere un elemento e ottenere il suo valore contemporaneamente.
d = {'k1': 1, 'k2': 2, 'k3': 3}
print(d.pop('k1'))
# 1
print(d)
# {'k2': 2, 'k3': 3}
Usare pop() è più semplice che usare del.
d = {'k1': 1, 'k2': 2, 'k3': 3}
d['k10'] = d.pop('k1')
print(d)
# {'k2': 2, 'k3': 3, 'k10': 1}
Si noti che per se esistente predefinito, si verifica un errore viene specificata una chiave in come primo argomento di pop().
d = {'k1': 1, 'k2': 2, 'k3': 3}
# print(d.pop('k10'))
# KeyError: 'k10'
Se viene specificato il secondo argomento di pop(), restituisce il valore senza errori. L’oggetto dizionario originale rimane invariato.
print(d.pop('k10', None))
# None
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
Può essere utilizzato per impostare un valore predefinito se si tenta di modificare una chiave che non esiste. Viene utilizzato nella funzione di seguito.
Definire una funzione per cambiare la chiave di un dizionario
Ecco alcuni esempi di funzioni per cambiare la chiave di un dizionario.
Se la vecchia chiave non esiste, aggiungi un nuovo elemento
Con pop(), ad esempio, è possibile definire la seguente funzione.
Il primo argomento è il dizionario di destinazione, il secondo è la vecchia chiave e il terzo è la nuova chiave.
def change_dict_key(d, old_key, new_key, default_value=None):
d[new_key] = d.pop(old_key, default_value)
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key(d, 'k1', 'k10')
print(d)
# {'k2': 2, 'k3': 3, 'k10': 1}
Se viene specificata una chiave inesistente come chiave precedente, viene aggiunto come nuovo elemento con il valore specificato nel quarto argomento (Nessuno per la domanda predefinita).
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key(d, 'k10', 'k100')
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k100': None}
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key(d, 'k10', 'k100', 100)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k100': 100}
Se viene specificata una chiave esistente come terzo argomento (nuova chiave), il valore della chiave esistente viene sovrascritto.
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key(d, 'k1', 'k2')
print(d)
# {'k2': 1, 'k3': 3}
Se si desidera mantenere il valore originale quando si specifica una chiave esistente come nuova chiave, utilizzare il metodo setdefault().
def change_dict_key_setdefault(d, old_key, new_key, default_value=None):
d.setdefault(new_key, d.pop(old_key, default_value))
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key_setdefault(d, 'k1', 'k2')
print(d)
# {'k2': 2, 'k3': 3}
Se la nuova chiave non è una chiave esistente, il comportamento è lo stesso della prima funzione.
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key_setdefault(d, 'k1', 'k10')
print(d)
# {'k2': 2, 'k3': 3, 'k10': 1}
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key_setdefault(d, 'k10', 'k100')
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k100': None}
Se la vecchia chiave non esiste, non fare nulla
Se non si desidera eseguire alcuna operazione quando la chiave specificata non esiste, utilizzare l’operatore in.
def change_dict_key_exist(d, old_key, new_key):
if old_key in d:
d[new_key] = d.pop(old_key)
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key_exist(d, 'k1', 'k10')
print(d)
# {'k2': 2, 'k3': 3, 'k10': 1}
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key_exist(d, 'k10', 'k100')
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
Se viene specificata una chiave esistente come terzo argomento (nuova chiave), il valore della chiave esistente viene sovrascritto.
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key_exist(d, 'k1', 'k2')
print(d)
# {'k2': 1, 'k3': 3}
Come nell’esempio precedente, se si desidera mantenere il valore originale quando si specifica una chiave esistente come nuova chiave, utilizzare il metodo setdefault().
def change_dict_key_exist_setdefault(d, old_key, new_key):
if old_key in d:
d.setdefault(new_key, d.pop(old_key))
d = {'k1': 1, 'k2': 2, 'k3': 3}
change_dict_key_exist_setdefault(d, 'k1', 'k2')
print(d)
# {'k2': 2, 'k3': 3}