
In Python, puoi creare un dizionario dict con parentesi graffe {}, dict() e comprensioni del dizionario.
In questo articolo vengono descritti i seguenti contenuti.
- Crea un dizionario con parentesi graffe {}
- Specificare chiavi e valori
- Unisci più nomi
- Crea un dizionario con dict()
- Usa argomenti chiave
- Con un elenco di coppie chiave/valore
- Con un elenco di chiavi e un elenco di valori
- Con un altro dizionario
- Crea un dizionario con le comprensioni del dizionario
Per ulteriori informazioni sui dizionari, come aggiungere e rimuovere elementi e verificarne l’esistenza, vedere gli articoli seguenti.
Crea un dizionario con parentesi graffe {}
Specificare chiavi e valori
Puoi creare un dizionario scrivendo la chiave e il valore come chiave: valore tra parentesi graffe {}.
{key: value, key: value, ...}
d = {'k1': 1, 'k2': 2, 'k3': 3}
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
Poiché la stessa chiave non può essere registrata nel dizionario, se viene specificata la stessa chiave, viene sovrascritta.
d = {'k1': 1, 'k2': 2, 'k3': 3, 'k3': 300}
print(d)
# {'k1': 1, 'k2': 2, 'k3': 300}
Unisci più nomi
Da Python 3.5, puoi scrivere come {**d1, **d2}.
È possibile creare un nuovo dizionario unendo due dizionari, come segue. I originali non vengono aggiornati.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d = {**d1, **d2}
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
print(d1)
# {'k1': 1, 'k2': 2}
print(d2)
# {'k3': 3, 'k4': 4}
Può essere utilizzato anche con chiave: valore.
print({**d1, **d2, 'k5': 5})
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5}
È possibile specificare tre o più dizionari.
d3 = {'k5': 5, 'k6': 6}
print({**d1, **d2, **d3})
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
Se viene specificata la stessa chiave, viene sovrascritta.
d4 = {'k1': 100, 'k3': 300}
print({**d1, **d2, **d3, **d4, 'k5': 500})
# {'k1': 100, 'k2': 2, 'k3': 300, 'k4': 4, 'k5': 500, 'k6': 6}
Se desideri creare un nuovo da più dizionari nelle versioni precedenti, usa dict(**d1, **d2) come descritto di seguito.
A partire da Python 3.9, è possibile unire più dizionari con | operatore. Vedere il seguente articolo per i dettagli.
Crea un dizionario con dict()
Puoi creare un dizionario con dict().
Esistono diversi modi per specificare gli argomenti.
Usa argomenti chiave
Può essere specificato con l’argomento della parola chiave chiave=valore.
d = dict(k1=1, k2=2, k3=3)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
In questo caso, puoi specificare solo stringhe valide come nomi di variabili come chiavi. Non può iniziare con un numero o contenere diversi da _.
Se viene specificata la stessa chiave, viene generato un errore.
# d = dict(k1=1, k2=2, k3=3, k3=300)
# SyntaxError: keyword argument repeated: k3
Con un elenco di coppie chiave/valore
Puoi anche specificare un elenco di coppie chiave-valore (come una tupla (chiave, valore)).
d = dict([('k1', 1), ('k2', 2), ('k3', 3)])
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
Può essere qualsiasi iterabile i cui elementi sono iterabili con una chiave e un valore. Ad esempio, può essere specificato come una tupla di elenchi o un elenco di elenchi.
d = dict((['k1', 1], ['k2', 2], ['k3', 3]))
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
In questo caso non c’è nessun errore anche se le chiavi sono duplicate. Viene sovrascritto dal valore dell’elemento successivo.
d = dict([('k1', 1), ('k2', 2), ('k3', 3), ('k3', 300)])
print(d)
# {'k1': 1, 'k2': 2, 'k3': 300}
Con un elenco di chiavi e un elenco di valori
Usando zip(), puoi creare un dizionario da un elenco di chiavi e un elenco di valori. Non solo le liste ma anche le tuple possono essere usate.
keys = ['k1', 'k2', 'k3']
values = [1, 2, 3]
d = dict(zip(keys, values))
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
Vedere il seguente articolo su zip().
Anche in questo caso non viene generato alcun errore anche se sono presenti chiavi duplicate, anche se qui non viene mostrato alcun esempio. Viene sovrascritto dal valore successivo.
Se si desidera manipolare valori in un elenco o selezionare elementi in base alle condizioni, utilizzare le comprensioni del seguito di seguito.
Con un altro dizionario
Se viene specificato un altro dizionario come argomento di dict(), viene creato un dizionario con le stesse chiavi e valori.
d_other = {'k10': 10, 'k100': 100}
d = dict(d_other)
print(d)
# {'k10': 10, 'k100': 100}
In questo caso, viene creata una copia superficiale. Se il valore contiene oggetti modificabili come elenchi o elenchi, sono lo stesso oggetto nell’originale e nella copia, quindi quando uno viene aggiornato, viene aggiornato anche l’altro.
Viene generato un errore se vengono specificati più come argomenti di dict().
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
# d = dict(d1, d2)
# TypeError: dict expected at most 1 arguments, got 2
Come accennato in precedenza, dict() ti consenti di specificare chiavi e valori come argomenti di parole chiave (chiave=valore), quindi puoi aggiungere ** al dizionario e passare ogni elemento come argomento di parole chiave.
d = dict(**d1, **d2)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
Si noti che le chiavi duplicate causano un errore in questo caso.
Come accennato in precedenza, è anche possibile utilizzare {**d1, **d2} da Python 3.5, nel qual caso le chiavi duplicate non sono un problema.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3}
# d = dict(**d1, **d2)
# TypeError: dict() got multiple values for keyword argument 'k1'
d = {**d1, **d2}
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}
Crea un dizionario con le comprensioni del dizionario
Allo stesso modo in cui gli elenchi possono essere creati con le comprensioni di elenchi, i dizionari possono essere creati con le comprensioni dei dizionari.
La differenza alle rispetto delle comprensioni degli elenchi è che le comprensioni del dizionario sono racchiuse tra {} invece di [] e le chiavi ei valori sono specificati.
{key: value for variable_name in iterable}
È possibile specificare qualsiasi espressione per chiave e valore.
l = ['Alice', 'Bob', 'Charlie']
d = {s: len(s) for s in l}
print(d)
# {'Alice': 5, 'Bob': 3, 'Charlie': 7}
Per creare un dizionario da un elenco di chiavi e un elenco di valori, utilizzare zip() come nel caso dict().
keys = ['k1', 'k2', 'k3']
values = [1, 2, 3]
d = {k: v for k, v in zip(keys, values)}
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
La ramificazione condizionale di se è possibile anche con le comprensioni del dizionario.
Se vuoi creare un elenco puoi semplicemente da un elenco puoi dict() come utilizzare un dizionario sopra, ma se vuoi selezionare i valori o selezionare elementi in base alle condizioni, le comprensioni del dizionario sono utili.
d = {k: v for k, v in zip(keys, values) if v % 2 == 1}
print(d)
# {'k1': 1, 'k3': 3}
Può anche essere utilizzato per creare un nuovo dizionario estraendo o rimuovere elementi da un dizionario esistente che soddisfano la condizione.
d = {'apple': 1, 'banana': 10, 'orange': 100}
dc = {k: v for k, v in d.items() if v % 2 == 0}
print(dc)
# {'banana': 10, 'orange': 100}
dc = {k: v for k, v in d.items() if v % 2 == 1}
print(dc)
# {'apple': 1}
dc = {k: v for k, v in d.items() if k.endswith('e')}
print(dc)
# {'apple': 1, 'orange': 100}
dc = {k: v for k, v in d.items() if not k.endswith('e')}
print(dc)
# {'banana': 10}
dc = {k: v for k, v in d.items() if v % 2 == 0 and k.endswith('e')}
print(dc)
# {'orange': 100}
Il metodo items() di dict viene utilizzato per estrarre chiavi e valori.