logo

Defaultdict u Pythonu

Rječnik je neuređena zbirka vrijednosti podataka u Pythonu koja se koristi za pohranjivanje vrijednosti podataka kao što su karte. Rječnik sadrži parove ključ-vrijednost umjesto da sadrži jednu vrijednost kao element kao druge vrste podataka. Ključ implementiran u rječniku mora biti jedinstven i nepromjenjiv. Odnosno, Python tuple može biti ključ, ali Python lista ne može biti ključ u rječniku. Rječnik možemo stvoriti postavljanjem niza elemenata unutar vitičastih zagrada {}, zarez ',' može odvojiti vrijednosti.

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

Izlaz:

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

Ali ako tada pokušamo ispisati petu vrijednost ključa, dobit ćemo pogrešku jer 'Dict_1' ne sadrži 5. vrijednost ključa.

Primjer 2:

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

Izlaz:

 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 

Kad god se keyError podignuta, može postati problem za korisnike. Ovu pogrešku možemo prevladati korištenjem drugog rječnika Pythona, koji je poput spremnika poznatog kao Defaultdict . Korisnici mogu pronaći ovaj rječnik unutar 'zbirke' modul.

defaultdict

Defaultdict je rječnik Pythona, koji je poput spremnika unutar modula 'zbirke'. To je potklasa klase rječnika koja se koristi za vraćanje objekta sličnog rječniku. I defaultdict i rječnik imaju istu funkcionalnost, osim što defaultdict nikada ne pokreće KeyError jer pruža zadanu vrijednost za ključ, koji ne postoji u rječniku koji je stvorio korisnik.

Sintaksa:

 defaultdict(default_factory) 

Parametri:

    zadana_tvornica:Funkcija default_factory() vraća zadanu vrijednost koju je korisnik postavio za rječnik koji je definirao. Ako ovog argumenta nema, tada će rječnik pokrenuti KeyError.

Primjer:

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

Izlaz:

 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 

Unutarnji rad defaultdicta

Kada koristimo defaultdict, dobivamo dodatnu varijablu instance koja se može pisati i jednu metodu uz standardne operacije rječnika. Varijabla instance za pisanje je default_factory parametar i __nedostaje__ je metoda.

    zadana_tvornica:Funkcija default_factory() vraća zadanu vrijednost koju je korisnik postavio za rječnik koji je definirao.

Primjer:

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

Izlaz:

 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>
    __nedostaje__():Funkcija __missing__() koristi se za pružanje zadane vrijednosti rječniku. Funkcija __missing__() uzima default_factory kao argument, a ako je argument postavljen na Ništa, pojavit će se KeyError; u suprotnom će dati zadanu vrijednost za dati ključ. Ovu metodu u biti naziva __getitem__() funkcija dict klase kada traženi ključ nije pronađen. Funkcija __getitem__() podiže ili vraća vrijednost koja je prisutna u funkciji __missing__().

Primjer:

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

Izlaz:

 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 koristiti 'List' kao default_factory

Možemo proslijediti klasu liste kao argument default_factory, a ona će stvoriti defaultdict s vrijednostima koje su postavljene u formatu liste.

Primjer:

 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) 

Izlaz:

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

Kako koristiti 'int' kao default_factory

Možemo proslijediti klasu int kao argument default_factory, a ona će stvoriti defaultdict sa zadanom vrijednošću postavljenom na nulu.

Primjer:

 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) 

Izlaz:

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

Zaključak

U ovom vodiču raspravljali smo o defaultdictu u Pythonu io tome kako možemo izvesti različite operacije na defaultdictu pomoću parametra default_factory.