W3docs

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:

python— editable, runs on the server

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

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

python— editable, runs on the server

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'] = value

Cambiare sia la Chiave che il Valore

Combina il pattern di rinomina con una riassegnazione del valore per cambiarli entrambi in una volta:

python— editable, runs on the server

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

SituazioneCosa succedeSoluzione
Assegnazione a una chiave mancanteCrea una nuova voce (nessun errore)Controlla if key in d prima se vuoi solo aggiornare
Chiamata di pop() su una chiave mancanteSolleva KeyErrorUsa d.pop(key, default)
La rinomina non preserva la posizione originaleLa nuova chiave va in fondoSe l'ordine è importante, ricostruisci con una dict comprehension
update() con chiavi sovrapposteSovrascrive silenziosamenteIntenzionale — è 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.

Pratica

Pratica
In Python, how can you change the items in a list?
In Python, how can you change the items in a list?
Was this page helpful?