logo

Defaultdict v Pythonu

Slovar je neurejena zbirka podatkovnih vrednosti v Pythonu, ki se uporablja za shranjevanje podatkovnih vrednosti, kot so zemljevidi. Slovar vsebuje pare ključ-vrednost namesto ene same vrednosti kot elementa kot drugi tipi podatkov. Ključ, implementiran v slovar, mora biti edinstven in nespremenljiv. To pomeni, da je Python tuple lahko ključ, vendar seznam Python ne more biti ključ v slovarju. Slovar lahko ustvarimo tako, da zaporedje elementov postavimo znotraj zavitih oklepajev {}, vejica ',' lahko loči vrednosti.

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

Izhod:

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

Če pa poskušamo natisniti peto vrednost ključa, bomo dobili napako, ker 'Dict_1' ne vsebuje 5. ključne vrednosti.

Primer 2:

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

Izhod:

 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 

Kadar koli keyError dvigne, lahko postane težava za uporabnike. To napako lahko odpravimo z uporabo drugega slovarja Python, ki je kot vsebnik, znan kot Defaultdict . Uporabniki lahko najdejo ta slovar znotraj 'zbirke' modul.

defaultdict

Privzeti ukaz je slovar Pythona, ki je kot vsebnik znotraj modula 'zbirke'. Je podrazred razreda slovarja, ki se uporablja za vrnitev objekta, podobnega slovarju. Tako defaultdict kot slovar imata enako funkcionalnost, le da defaultdict nikoli ne sproži nobene KeyError, saj zagotavlja privzeto vrednost za ključ, ki ne obstaja v slovarju, ki ga ustvari uporabnik.

Sintaksa:

 defaultdict(default_factory) 

Parametri:

    privzeta_tovarna:Funkcija default_factory() vrne privzeto vrednost, ki jo nastavi uporabnik za slovar, ki ga definira sam. Če tega argumenta ni, bo slovar sprožil KeyError.

primer:

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

Izhod:

 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 

Notranje delovanje defaultdict

Ko uporabimo defaultdict, dobimo dodatno zapisljivo spremenljivko primerka in eno metodo poleg standardnih slovarskih operacij. Zapisljiva spremenljivka primerka je parameter default_factory in __manjka__ je metoda.

    privzeta_tovarna:Funkcija default_factory() vrne privzeto vrednost, ki jo nastavi uporabnik za slovar, ki ga definira sam.

primer:

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

Izhod:

 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>
    __manjka__():Funkcija __missing__() se uporablja za zagotavljanje privzete vrednosti za slovar. Funkcija __missing__() vzame default_factory kot argument in če je argument nastavljen na None, se sproži KeyError; drugače bo zagotovil privzeto vrednost za dani ključ. To metodo v bistvu imenuje __getitem__() funkcija razreda dict, ko zahtevani ključ ni najden. Funkcija __getitem__() dvigne ali vrne vrednost, ki je prisotna v funkciji __missing__().

primer:

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

Izhod:

 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>

Kako uporabiti 'List' kot default_factory

Razred seznama lahko posredujemo kot argument default_factory in ustvaril bo defaultdict z vrednostmi, ki so nastavljene v obliki seznama.

primer:

 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) 

Izhod:

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

Kako uporabiti 'int' kot default_factory

Razred int lahko posredujemo kot argument default_factory in ustvaril bo defaultdict s privzeto vrednostjo, nastavljeno na nič.

primer:

 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) 

Izhod:

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

Zaključek

V tej vadnici smo razpravljali o defaultdict v Pythonu in o tem, kako lahko izvajamo različne operacije na defaultdict z uporabo parametra default_factory.