
Questo articolo spiega come aggiungere un nuovo elemento a un dizionario dict o aggiornare il valore di un elemento esistente in Python. È anche possibile unire più dizionari.
- Aggiungi/aggiorna un elemento nel/nel dizionario specificando una chiave
- Unisci più nomi:
update(), {}, dict(), |, |=
- Aggiungi/aggiorna più elementi nel/nel dizionario:
update(), |=
Vedere gli articoli seguenti su come rimuovere un elemento da un dizionario, verificare l’esistenza di una chiave e cambiare la chiave.
Aggiungi/aggiorna un elemento nel/nel dizionario specificando una chiave
È possibile aggiungere un elemento al dizionario o aggiornare il valore di un elemento esistente come segue.
Se viene specificata una chiave inesistente, viene aggiunto un nuovo elemento e se viene specificata una chiave esistente, il valore dell’elemento esistente viene aggiornato (sovrascritto).
d = {'k1': 1, 'k2': 2}
d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}
Se non si desidera aggiornare il valore di una chiave esistente, utilizzare il metodo setdefault(). Vedi il seguente articolo.
Unisci più nomi:update(), |, |=
aggiornare()
Specificando un altro dict come argomento del metodo update(), vengono aggiunti tutti i suoi elementi.
Se la chiave si sovrappone a una chiave esistente, viene sovrascritta con il valore di dict specificato nell’argomento.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Viene generato un errore se viene specificato più di un dizionario come argomento di update().
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2
Come più avanti, update() può aggiungere nuovi elementi con argomenti chiave (chiave=valore), in modo da poter decomprimere e passare ogni elemento con **.
d1.update(**d2, **d3)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
In questo caso, va bene che le chiavi del dizionario che chiama il metodo e le chiavi del dizionario specificato nell’argomento siano duplicate come nell’esempio precedente, ma viene generato un errore se le chiavi di più specificati nell’argomento sono duplicati.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
# d3.update(**d1, **d2)
# TypeError: dict.update() got multiple values for keyword argument 'k1'
{} (Python 3.5 o successivo), dict()
Con update(), il dizionario originale viene aggiornato.
Se vuoi creare un nuovo dizionario unendo più dizionari, usa {**d1, **d2} (da Python 3.5) o dict(**d1, **d2).
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
print({**d1, **d2})
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
print(dict(**d1, **d2))
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
Nel caso di caso di ct(**d1, **d2), si verifica un errore se le chiavi di più dizionari come argomenti vengono duplicate.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
print({**d1, **d2})
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
# print(dict(**d1, **d2))
# TypeError: dict() got multiple values for keyword argument 'k1'
Vedere i seguenti articoli per i dettagli su come creare un dizionario.
In Python 3.9 o versioni successive, è anche possibile creare un nuovo dizionario utilizzando | operatore di seguito.
| operatore, |= operatore (Python 3.9 o successivo)
A partire da Python 3.9, è possibile unire due dizionari con il | operatore. Se hanno la stessa chiave, viene sovrascritta dal valore a destra.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d = d1 | d2
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
d = d2 | d1
print(d)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}
È possibile combinare più dizionario.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
d = d1 | d2 | d3
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
Vieni += per +, |= per | è anche fornito. Come con update(), l’oggetto a sinistra viene aggiornato.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Aggiungi/aggiorna più elementi nel/nel dizionario:update(), |=
aggiornare()
Se l’argomento della parola chiave chiave=valore è specificato nel metodo update(), l’elemento con la relativa chiave e valore viene aggiunto. Se la chiave si sovrappone a una esistente, viene sovrascritta con il valore specificato come argomento.
d = {'k1': 1, 'k2': 2}
d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
È anche possibile specificare un elenco di (chiave, valore) come argomento del metodo update(). Se la chiave si sovrappone a una esistente, viene sovrascritta con il valore specificato come argomento.
d = {'k1': 1, 'k2': 2}
d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
È possibile utilizzare zip() per aggiungere elementi da un elenco di chiavi e da un elenco di valori.
d = {'k1': 1, 'k2': 2}
keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]
d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Vedere il seguente articolo su zip().
Per gli argomenti delle parole chiave, viene generato un errore se viene specificata la stessa chiave. Nel caso di liste (chiave, valore) e zip(), sono accettabili chiavi duplicate. Viene sovrascritto dal valore successivo.
d = {'k1': 1, 'k2': 2}
# d.update(k3=3, k3=300)
# SyntaxError: keyword argument repeated: k3
d = {'k1': 1, 'k2': 2}
d.update([('k3', 3), ('k3', 300)])
print(d)
# {'k1': 1, 'k2': 2, 'k3': 300}
d = {'k1': 1, 'k2': 2}
keys = ['k3', 'k3']
values = [3, 300]
d.update(zip(keys, values))
print(d)
# {'k1': 1, 'k2': 2, 'k3': 300}
|= operatore(Python 3.9 o successivo)
L’operatore |= acconsenti di specificare un elenco di (chiave, valore) sul lato destro.
d = {'k1': 1, 'k2': 2}
d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Il | operatore supporta solo le operazioni tra manuali. Non è possibile specificare un elenco.
# d | [('k1', 100), ('k3', 3), ('k4', 4)]
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'