Python offre molte strutture dati integrate, come elenchi, tuple e dizionari, per salvare e gestire i dati in modo efficiente. I dizionari forniscono un modo semplice per salvare i dati come coppie chiave-valore. Una chiave funge da indice e viene utilizzata per recuperare i dati. Le chiavi dovrebbero essere uniche e immutabili in tutto il dizionario. Le chiavi sono principalmente stringhe e numeri interi, sebbene il valore di una chiave possa essere di qualsiasi tipo, ad esempio un numero intero, una stringa, un numero a virgola mobile o un numero complesso. Nel frattempo, un dizionario può contenere una raccolta, come una lista, una tupla o qualche altro tipo di dizionario. Un dizionario in Python viene creato utilizzando una coppia di parentesi graffe, in cui ogni coppia chiave-valore è separata da una virgola.
Cosa succede se si tenta di accedere o modificare una chiave specifica in un dizionario che non esiste?? Bene, in questo caso, l'interprete Python genererà l'errore "KeyError" e terminerà l'esecuzione del programma.
Diamo un'occhiata a un esempio dell'errore "KeyError".
#creare un dizionariomy_dict= 1:"Ciao",2:"Benvenuto",3:"LinuxHint"
#accedere a una chiave che non esiste
mio_detto[4]
Produzione
Per gestire questo errore, Python fornisce il tipo defaultdict, una classe dizionario che può essere trovata nel modulo delle collezioni. Questo articolo tratta in dettaglio il defaultdict di Python.
Spiegazione ed esempi di defaultdict
Il defaultdict è l'alternativa del dizionario Python. Restituisce oggetti di tipo dizionario. Il defaultdict è una sottoclasse di dict. Nel caso di una chiave mancante, invece di generare un errore “KeyError”, viene fornito il valore di default per la chiave inesistente. La sintassi di defaultdict è la seguente:
defaultdict(default_factory)La funzione defaultdict accetta il parametro default_factory come argomento. La funzione default_factory restituisce il valore predefinito per il defaultdict definito. Se proviamo ad accedere o modificare una chiave mancante, la funzione default_factory restituisce il valore predefinito come risultato. Se la funzione default_factory è mancante, il defaultdic genererà un errore "KeyError" se ci sono chiavi mancanti.
Innanzitutto, implementeremo un defaultdic nel nostro script Python per accedere a chiavi esistenti e mancanti.
#importare il defaultdict dal modulo di raccoltadalle collezioni import defaultdict
#definizione di una funzione per restituire il valore predefinito
def my_func():
print("La chiave non è definita")
#creazione di un defualtdict
#passando my_func() come argomento a defaultdict
my_dict =defaultdict(my_func)
#definire le chiavi e i valori
my_dict[1]="Ciao"
my_dict[2]="Benvenuto"
my_dict[3]="LinuxHint"
#accedere ai valori tramite chiavi
print(my_dict[1])
print(my_dict[2])
print(my_dict[3])
#accedere alla chiave mancante o non definita
mio_detto[4]
Produzione
La [4] è la chiave mancante. Quindi, invece di generare un errore "KeyError", chiama la funzione default_factory, che restituisce il valore predefinito.
Una funzione lambda, nota come funzione anonima, può essere utilizzata anche come parametro default_factory.
Successivamente, implementeremo una funzione lambda e la passeremo come argomento al defaultdict.
#importare il defaultdict dal modulo di raccoltadalle collezioni import defaultdict
#creazione di un defualtdict
#passare la funzione Lamnda come argomento a defaultdict
my_dict =defaultdict(lambda:"La chiave non è definita")
#definire le chiavi e i valori
my_dict[1]="Ciao"
my_dict[2]="Benvenuto"
my_dict[3]="LinuxHint"
#accedere ai valori tramite chiavi
print(my_dict[1])
print(my_dict[2])
print(my_dict[3])
#accedere alla chiave mancante o non definita
print(my_dict[4])
Il defaultdict chiama default_factory per fornire il valore predefinito, ma la funzione __missing()__ fornisce il valore predefinito. La funzione __missing()__ è una funzione incorporata in Python che accetta il parametro default_factory come argomento. Se il parametro default_factory non è definito, la funzione __missing()__ genera l'errore "KeyError".
Qui useremo la funzione __missing()__ nel nostro script Python.
#importare il defaultdict dal modulo di raccoltadalle collezioni import defaultdict
#definizione di una funzione per restituire il valore predefinito
def my_func():
print("La chiave non è definita")
#creazione di un defualtdict
#passando my_func() come argomento a defaultdict
my_dict =defaultdict(my_func)
#definire le chiavi e i valori
my_dict[1]="LinuxHint"
#accedere ai valori tramite chiavi
print(my_dict[1])
#accedere alla chiave mancante o non definita
mio_ditto.__mancante__(2)
Produzione
Le classi list e int possono anche essere usate come parametri default_factory con defaultdict.
Elenca come parametro default_factory
Il defaultdict viene creato con i valori dell'elenco quando alla classe dell'elenco viene passato un parametro default_factory.
#importare il defaultdict dal modulo di raccoltadalle collezioni import defaultdict
# definendo un defaultdict
# passando la classe della lista come default_factory
mio_dict = defaultdict(lista)
per i nell'intervallo (7):
mio_ditto[i].allegare(i)
#stampare i valori
print(my_dict)
Produzione
L'output mostra i valori nell'elenco. Come puoi vedere, è stato creato un defaultdict che contiene la chiave e i valori.
Interi come parametro default_factory
Se passiamo la classe int come parametro default_factory, allora possiamo creare un defaultdict che contiene solo numeri interi. Creeremo un elenco di numeri interi e poi lo salveremo nel defaultdict.
#importare il defaultdict dal modulo di raccoltadalle collezioni import defaultdict
# definendo un defaultdict
# passando la classe int come default_factory
mio_dict = defaultdict(int)
#creazione di un elenco di numeri interi
mia_lista=[1,2,3]
per io nella mia_lista:
mio_dict[i]+=1
#stampare i valori
print(my_dict)
Produzione
Nell'output dato, i valori interi prima dei due punti (:) sono chiavi, mentre i valori interi dopo i due punti sono valori.
Conclusione
Il dafualtdict è una classe simile a un dizionario presente nel modulo delle collezioni. Funziona come un dizionario Python ma non genera un "KeyError" quando una chiave non viene trovata. Questo articolo spiega in dettaglio il defaultdict con vari esempi.