Pitone

Python defaultdict

Python defaultdict

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 dizionario
my_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 raccolta
dalle 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 raccolta
dalle 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 raccolta
dalle 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 raccolta
dalle 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 raccolta
dalle 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.

Come installare League Of Legends su Ubuntu 14.04
Se sei un fan di League of Legends, questa è un'opportunità per testare League of Legends. Nota che LOL è supportato su PlayOnLinux se sei un utente L...
Installa l'ultimo gioco di strategia OpenRA su Ubuntu Linux
OpenRA è un motore di gioco di strategia in tempo reale gratuito/libero che ricrea i primi giochi di Westwood come il classico Command & Conquer: Red ...
Installa l'ultimo Dolphin Emulator per Gamecube e Wii su Linux
L'emulatore Dolphin ti consente di giocare ai giochi Gamecube e Wii scelti su Personal Computer Linux (PC). Essendo un emulatore di giochi liberament...