Dizionari Python: Come Modificare Chiavi e Valori
Scopri come modificare valori, rinominare chiavi e aggiornare elementi in blocco in Python con assignment, pop() e update() con esempi chiari.
I dizionari Python ti permettono di archiviare dati come coppie chiave-valore e aggiornarli liberamente dopo la creazione. Questo capitolo tratta tutti i modi pratici per modificare gli elementi esistenti di un dizionario: cambiare un singolo valore, rinominare una chiave, aggiornare in blocco con update() e gestire i dizionari annidati — compresi i casi limite che incontrerai nel codice reale.
Per informazioni di base su come funzionano i dizionari, consulta il capitolo Accedere agli Elementi del Dizionario. Per aggiungere nuove voci, vedi Aggiungere Elementi al Dizionario. Per eliminare voci, vedi Rimuovere Elementi dal Dizionario.
Cambiare un Valore
La modifica più semplice consiste nel riassegnare il valore memorizzato sotto una chiave esistente. Usa la chiave come indice sul lato sinistro di un'assegnazione:
Se la chiave esiste già, il valore viene sovrascritto sul posto. Le altre voci non vengono influenzate e il dizionario preserva il proprio ordine di inserimento (Python 3.7+).
Cosa succede quando la chiave non esiste?
Se usi l'assegnazione con una chiave che non è già presente nel dizionario, Python crea silenziosamente una nuova voce invece di sollevare un errore:
prices = {'apple': 1.00, 'banana': 0.50}
prices['mango'] = 2.50 # 'mango' did not exist — a new entry is created
print(prices)
# {'apple': 1.00, 'banana': 0.50, 'mango': 2.50}Quando vuoi aggiornare solo se una chiave esiste, controlla prima con in:
if 'banana' in prices:
prices['banana'] = 0.75Aggiornamento in Blocco con update()
dict.update() ti permette di cambiare più valori contemporaneamente. Passagli un dizionario (o argomenti keyword) di coppie chiave-valore da applicare:
inventory = {'apple': 10, 'banana': 5, 'orange': 8}
inventory.update({'banana': 12, 'orange': 3})
print(inventory)
# {'apple': 10, 'banana': 12, 'orange': 3}Le chiavi presenti nell'argomento sovrascrivono i valori esistenti; le chiavi non menzionate rimangono invariate. Puoi anche passare argomenti keyword direttamente:
inventory.update(apple=20, banana=15)
print(inventory)
# {'apple': 20, 'banana': 15, 'orange': 3}update() aggiunge anche eventuali chiavi dall'argomento che non esistono ancora nel dizionario di destinazione, rendendolo utile per unire due dizionari.
Rinominare (Cambiare) una Chiave
Le chiavi del dizionario sono riferimenti immutabili — non puoi rinominare direttamente una chiave. Il pattern standard consiste nell'aggiungere una nuova chiave con il vecchio valore ed eliminare la vecchia chiave. Il metodo pop() fa entrambe le cose in un'unica espressione:
pop('banana') restituisce 2 e rimuove la voce 'banana'. Assegnare quel valore di ritorno a my_dict['pear'] crea la voce rinominata.
Nota che la chiave rinominata appare alla fine del dizionario, non nella posizione originale di 'banana', perché è una nuova chiave che viene inserita.
Rinominare una chiave quando non si è sicuri che esista
Se la chiave potrebbe essere assente, pop() solleva un KeyError. Passa un valore predefinito come secondo argomento per evitare l'eccezione:
value = my_dict.pop('grape', None) # returns None if 'grape' is missing
if value is not None:
my_dict['kiwi'] = valueCambiare sia la Chiave che il Valore
Combina il pattern di rinomina con una riassegnazione del valore per cambiarli entrambi in una volta:
Oppure condensalo in un unico passaggio assegnando direttamente il valore desiderato invece del valore estratto con pop:
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict.pop('banana') # remove old key (discard value)
my_dict['pear'] = 4 # insert new key with new value
print(my_dict)
# {'apple': 1, 'orange': 3, 'pear': 4}Aggiornare Elementi in un Dizionario Annidato
Quando un dizionario contiene altri dizionari come valori, usa l'indicizzazione concatenata per raggiungere il valore interno:
catalog = {
'apple': {'price': 1.00, 'stock': 50},
'banana': {'price': 0.50, 'stock': 30},
}
# Update only the price of 'banana'
catalog['banana']['price'] = 0.75
print(catalog['banana'])
# {'price': 0.75, 'stock': 30}Puoi anche chiamare update() sul dizionario interno:
catalog['apple'].update({'price': 1.20, 'stock': 45})
print(catalog['apple'])
# {'price': 1.20, 'stock': 45}Errori Comuni
| Situazione | Cosa succede | Soluzione |
|---|---|---|
| Assegnazione a una chiave mancante | Crea una nuova voce (nessun errore) | Controlla if key in d prima se vuoi solo aggiornare |
Chiamata di pop() su una chiave mancante | Solleva KeyError | Usa d.pop(key, default) |
| La rinomina non preserva la posizione originale | La nuova chiave va in fondo | Se l'ordine è importante, ricostruisci con una dict comprehension |
update() con chiavi sovrapposte | Sovrascrive silenziosamente | Intenzionale — è lo scopo di update() |
Ricostruire per preservare l'ordine delle chiavi
Se hai bisogno che la chiave rinominata rimanga nella sua posizione originale, ricostruisci il dizionario con una comprehension:
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict = {
('pear' if k == 'banana' else k): v
for k, v in my_dict.items()
}
print(my_dict)
# {'apple': 1, 'pear': 2, 'orange': 3}Questo itera su ogni voce esistente e produce la chiave rinominata solo dove la condizione è vera, lasciando tutto il resto invariato.