logo

Defaultdict in Python

Il dizionario è una raccolta non ordinata di valori di dati in Python utilizzata per archiviare valori di dati come le mappe. Il dizionario contiene coppie chiave-valore invece di contenere un singolo valore come elemento come altri tipi di dati. La chiave implementata nel dizionario deve essere unica e immutabile. Cioè, la tupla Python può essere una chiave, ma la lista Python non può essere una chiave nel dizionario. Possiamo creare un dizionario inserendo una sequenza di elementi all'interno delle parentesi graffe {}, una virgola ',' può separare i valori.

Esempio 1:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 1: ', Dict_1[1]) print ('key pair 3: ', Dict_1[3]) 

Produzione:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} key pair 1: A key pair 3: C 

Ma se proviamo a stampare il quinto valore chiave, otterremo l'errore perché 'Dict_1' non contiene il quinto valore chiave.

Esempio 2:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 5: ', Dict_1[5]) 

Produzione:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} --------------------------------------------------------------------------- KeyError Traceback (most recent call last) in 2 print ('Dictionary: ') 3 print (Dict_1) ----> 4 print ('key pair 5: ', Dict_1[5]) KeyError: 5 

Ogni volta che keyError viene sollevato, potrebbe diventare un problema per gli utenti. Possiamo superare questo errore utilizzando un altro dizionario Python, che è come un contenitore noto come Defaultdict . Gli utenti possono trovare questo dizionario all'interno del file 'collezioni' modulo.

defaultdict

Il defaultdict è un dizionario di Python, che è come un contenitore presente all'interno del modulo 'collections'. È una sottoclasse della classe dizionario che viene utilizzata per restituire l'oggetto simile a un dizionario. Sia defaultdict che dizionario hanno la stessa funzionalità, tranne che defaultdict non solleva mai alcun KeyError poiché fornisce un valore predefinito per la chiave, che non esiste nel dizionario creato dall'utente.

Sintassi:

 defaultdict(default_factory) 

parametri:

    fabbrica_predefinita:La funzione default_factory() restituisce il valore predefinito impostato dall'utente per il dizionario da lui definito. Se questo argomento è assente, il dizionario solleverà il KeyError.

Esempio:

 from collections import defaultdict as DD # Function for returning a default values for the # keys which are not present in the dictionary def default_value(): return 'This key is not present' # Now, we will define the dict dict_1 = DD(default_value) dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key pair 1: ', dict_1['ABC']) print ('key pair 3: ', dict_1['GHI']) print ('key pair 5: ', dict_1['MNO']) 

Produzione:

 Dictionary: defaultdict(, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4}) key pair 1: 1 key pair 3: 3 key pair 5: This key is not present 

Funzionamento interno di defaultdict

Quando utilizziamo defaultdict, otteniamo una variabile di istanza scrivibile aggiuntiva e un metodo in aggiunta alle operazioni del dizionario standard. La variabile di istanza scrivibile è il parametro default_factory e __mancante__ è il metodo.

    fabbrica_predefinita:La funzione default_factory() restituisce il valore predefinito impostato dall'utente per il dizionario da lui definito.

Esempio:

 from collections import defaultdict as DD dict_1 = DD(lambda: 'This key is not present') dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key value 1: ', dict_1['ABC']) print ('key value 3: ', dict_1['GHI']) print ('key value 5: ', dict_1['MNO']) 

Produzione:

download delle m
 Dictionary: defaultdict(<function at 0x0000019efc4b58b0>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: 1 key value 3: 3 key value 5: This key is not present </function>
    __mancante__():La funzione __missing__() viene utilizzata per fornire il valore predefinito al dizionario. La funzione __missing__() accetta default_factory come argomento e, se l'argomento è impostato su None, verrà generato un KeyError; in caso contrario, fornirà un valore predefinito per la chiave specificata. Questo metodo è essenzialmente chiamato da __getoggetto__() funzione della classe dict quando la chiave richiesta non viene trovata. La funzione __getitem__() aumenta o restituisce il valore presente nella funzione __missing__().

Esempio:

 from collections import defaultdict as DD dict_1 = DD(lambda: &apos;This key is not present&apos;) dict_1[&apos;ABC&apos;] = 1 dict_1[&apos;DEF&apos;] = 2 dict_1[&apos;GHI&apos;] = 3 dict_1[&apos;JKL&apos;] = 4 print (&apos;Dictionary: &apos;) print (dict_1) print (&apos;key value 1: &apos;, dict_1.__missing__(&apos;ABC&apos;)) print (&apos;key value 4: &apos;, dict_1[&apos;JKL&apos;]) print (&apos;key value 5: &apos;, dict_1.__missing__(&apos;MNO&apos;)) 

Produzione:

 Dictionary: defaultdict(<function at 0x0000019efc4b5670>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: This key is not present key value 4: 4 key value 5: This key is not present </function>

Come utilizzare 'Elenco' come default_factory

Possiamo passare una classe elenco come argomento default_factory e creerà un defaultdict con i valori impostati nel formato elenco.

Esempio:

 from collections import defaultdict as DD # Defining a dictionary dict_1 = DD(list) for k in range(7, 12): dict_1[k].append(k) print (&apos;Dictionary with values as list:&apos;) print (dict_1) 

Produzione:

 Dictionary with values as list: defaultdict(, {7: [7], 8: [8], 9: [9], 10: [10], 11: [11]}) 

Come utilizzare 'int' come default_factory

Possiamo passare la classe int come argomento default_factory e creerà un defaultdict con il valore predefinito impostato come zero.

Esempio:

 from collections import defaultdict as DD # Defining the dict dict_1 = DD(int) J = [1, 2, 3, 4, 2, 4, 1, 2] # Now, we will iterate through the list &apos;J&apos; # for keeping the count for k in J: # As, The default value is 0 # so we do not need to # enter the key first dict_1[k] += 1 print(dict_1) 

Produzione:

 defaultdict(, {1: 2, 2: 3, 3: 1, 4: 2}) 

Conclusione

In questo tutorial, abbiamo discusso di defaultdict in Python e di come possiamo eseguire diverse operazioni su defaultdict utilizzando il parametro default_factory.