logo

Defaultdict en Python

El diccionari és una col·lecció no ordenada de valors de dades en Python que s'utilitza per emmagatzemar valors de dades com ara mapes. El diccionari conté parells clau-valor en lloc de contenir un sol valor com a element com altres tipus de dades. La clau implementada al diccionari ha de ser única i immutable. És a dir, la tupla de Python pot ser una clau, però la llista de Python no pot ser una clau del diccionari. Podem crear un diccionari col·locant una seqüència d'elements dins dels claudàtors {}, una coma ',' pot separar els valors.

Exemple 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]) 

Sortida:

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

Però si intentem imprimir el 5è valor de la clau, obtindrem l'error perquè 'Dict_1' no conté el 5è valor de clau.

Exemple 2:

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

Sortida:

 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 

Sempre que el keyError es planteja, pot esdevenir un problema per als usuaris. Podem superar aquest error utilitzant un altre diccionari de Python, que és com un contenidor conegut com Defaultdict . Els usuaris poden trobar aquest diccionari dins del 'col·leccions' mòdul.

dictamen predeterminat

El defaultdict és un diccionari de Python, que és com un contenidor present dins del mòdul 'col·leccions'. És una subclasse de la classe de diccionari que s'utilitza per retornar l'objecte semblant al diccionari. Tant defaultdict com el diccionari tenen la mateixa funcionalitat, tret que defaultdict no genera mai cap KeyError, ja que proporciona un valor predeterminat per a la clau, que no existeix al diccionari creat per l'usuari.

Sintaxi:

 defaultdict(default_factory) 

Paràmetres:

    default_factory:La funció default_factory() retorna el valor predeterminat establert per l'usuari per al diccionari definit per ells. Si no hi ha aquest argument, el diccionari generarà KeyError.

Exemple:

 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']) 

Sortida:

 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 

Funcionament intern de defaultdict

Quan utilitzem defaultdict, obtenim una variable d'instància escrivible addicional i un mètode a més de les operacions estàndard del diccionari. La variable d'instància que es pot escriure és el paràmetre default_factory i __falta__ és el mètode.

    default_factory:La funció default_factory() retorna el valor predeterminat establert per l'usuari per al diccionari definit per ells.

Exemple:

 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']) 

Sortida:

 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>
    __falta__():La funció __missing__() s'utilitza per proporcionar el valor predeterminat al diccionari. La funció __missing__() pren default_factory com a argument, i si l'argument s'estableix en None, es generarà un KeyError; en cas contrari, proporcionarà un valor predeterminat per a la clau donada. Aquest mètode s'anomena essencialment per __getitem__() funció de la classe dict quan no es troba la clau sol·licitada. La funció __getitem__() augmenta o retorna el valor que està present a la funció __missing__().

Exemple:

 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;)) 

Sortida:

 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>

Com utilitzar 'Llista' com a default_factory

Podem passar una classe de llista com a argument default_factory, i crearà un defaultdict amb els valors establerts en format de llista.

Exemple:

 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) 

Sortida:

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

Com utilitzar 'int' com a default_factory

Podem passar la classe int com a argument default_factory i crearà un defaultdict amb el valor predeterminat definit com a zero.

Exemple:

 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) 

Sortida:

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

Conclusió

En aquest tutorial, hem parlat de defaultdict a Python i de com podem realitzar diferents operacions a defaultdict mitjançant el paràmetre default_factory.