Defaultdict in Python
Dizionario in Python è una raccolta non ordinata di valori di dati utilizzati per archiviare valori di dati come una mappa. A differenza di altri tipi di dati che contengono solo un singolo valore come elemento, il dizionario contiene una coppia chiave-valore. Nel Dizionario, la chiave deve essere univoca e immutabile. Ciò significa che una tupla Python può essere una chiave mentre una lista Python no. Un dizionario può essere creato inserendo una sequenza di elementi tra parentesi graffe {}, separati da 'virgola'.
Esempio:
Python3
# Python program to demonstrate> # dictionary> > > Dict> => {> 1> :> 'Geeks'> ,> 2> :> 'For'> ,> 3> :> 'Geeks'> }> print> (> 'Dictionary:'> )> print> (> Dict> )> print> (> Dict> [> 1> ])> > # Uncommenting this print(Dict[4])> # will raise a KeyError as the> # 4 is not present in the dictionary> |
Produzione:
Dictionary: {1: 'Geeks', 2: 'For', 3: 'Geeks'} Geeks Traceback (most recent call last): File '/home/1ca83108cc81344dc7137900693ced08.py', line 11, in print(Dict[4]) KeyError: 4
A volte, quando viene sollevato il KeyError, potrebbe diventare un problema. Per superare questo problema Python introduce un altro dizionario come container noto come Defaultdict che è presente all'interno del modulo collezioni.
Nota: Per ulteriori informazioni, fare riferimento a Dizionario Python .
DefaultDict
Defaultdict è un contenitore come dizionari presente nel modulo collezioni . Defaultdict è una sottoclasse della classe dizionario che restituisce un oggetto simile a un dizionario. La funzionalità dei dizionari e di defaultdict è quasi la stessa, tranne per il fatto che defaultdict non solleva mai un KeyError. Fornisce un valore predefinito per la chiave che non esiste.
Sintassi: defaultdict(default_factory)
parametri:default_factory: una funzione che restituisce il valore predefinito per il dizionario definito. Se questo argomento è assente il dizionario solleva un KeyError.
Esempio:
Python3
# Python program to demonstrate> # defaultdict> > > from> collections> import> defaultdict> > > # Function to return a default> # values for keys that is not> # present> def> def_value():> > return> 'Not Present'> > # Defining the dict> d> => defaultdict(def_value)> d[> 'a'> ]> => 1> d[> 'b'> ]> => 2> > print> (d[> 'a'> ])> print> (d[> 'b'> ])> print> (d[> 'c'> ])> |
Produzione:
1 2 Not Present
Funzionamento interno di defaultdict
Defaultdict aggiunge una variabile di istanza scrivibile e un metodo in aggiunta alle operazioni del dizionario standard. La variabile di istanza è il parametro default_factory e il metodo fornito è __missing__.
- Default_factory: è una funzione che restituisce il valore predefinito per il dizionario definito. Se questo argomento è assente il dizionario solleva un KeyError.
Esempio:
Python3
# Python program to demonstrate> # default_factory argument of> # defaultdict> > > from> collections> import> defaultdict> > > # Defining the dict and passing> # lambda as default_factory argument> d> => defaultdict(> lambda> :> 'Not Present'> )> d[> 'a'> ]> => 1> d[> 'b'> ]> => 2> > print> (d[> 'a'> ])> print> (d[> 'b'> ])> print> (d[> 'c'> ])> |
Produzione:
1 2 Not Present
- __missing__(): questa funzione viene utilizzata per fornire il valore predefinito per il dizionario. Questa funzione accetta default_factory come argomento e se questo argomento è None, viene sollevato un KeyError altrimenti fornisce un valore predefinito per la chiave specificata. Questo metodo viene fondamentalmente chiamato dal metodo __getitem__() della classe dict quando la chiave richiesta non viene trovata. __getitem__() genera o restituisce il valore restituito da __missing__(). metodo.
Esempio:
Python3
# Python program to demonstrate> # defaultdict> > > from> collections> import> defaultdict> > > # Defining the dict> d> => defaultdict(> lambda> :> 'Not Present'> )> d[> 'a'> ]> => 1> d[> 'b'> ]> => 2> > # Provides the default value> # for the key> print> (d.__missing__(> 'a'> ))> print> (d.__missing__(> 'd'> ))> |
Produzione:
Not Present Not Present
Utilizzo di List come default_factory
Quando la classe list viene passata come argomento default_factory, viene creato un defaultdict con i valori di list.
Esempio:
Python3
# Python program to demonstrate> # defaultdict> > > from> collections> import> defaultdict> > > # Defining a dict> d> => defaultdict(> list> )> > for> i> in> range> (> 5> ):> > d[i].append(i)> > print> (> 'Dictionary with values as list:'> )> print> (d)> |
Produzione:
Dictionary with values as list: defaultdict(, {0: [0], 1: [1], 2: [2], 3: [3], 4: [4]}) Utilizzando int come default_factory
Quando la classe int viene passata come argomento default_factory, viene creato un defaultdict con valore predefinito pari a zero.
Esempio:
Python3
# Python program to demonstrate> # defaultdict> > > from> collections> import> defaultdict> > > # Defining the dict> d> => defaultdict(> int> )> > L> => [> 1> ,> 2> ,> 3> ,> 4> ,> 2> ,> 4> ,> 1> ,> 2> ]> > # Iterate through the list> # for keeping the count> for> i> in> L:> > > # The default value is 0> > # so there is no need to> > # enter the key first> > d[i]> +> => 1> > print> (d)> |
Produzione:
defaultdict(, {1: 2, 2: 3, 3: 1, 4: 2})