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:
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.
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>, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4}) key value 1: 1 key value 3: 3 key value 5: This key is not present </function>
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.__missing__('ABC')) print ('key value 4: ', dict_1['JKL']) print ('key value 5: ', dict_1.__missing__('MNO'))
Izlaz:
Dictionary: defaultdict(<function at 0x0000019efc4b5670>, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 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 ('Dictionary with values as list:') 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 'J' # 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.