Python ponuja številne vgrajene podatkovne strukture, kot so seznami, nabori in slovarji, za učinkovito shranjevanje in upravljanje podatkov. Slovarji omogočajo enostaven način shranjevanja podatkov kot parov ključ-vrednost. Ključ deluje kot indeks in se uporablja za pridobivanje podatkov. Ključi naj bodo v slovarju edinstveni in nespremenljivi. Tipke so večinoma nizi in cela števila, čeprav je vrednost ključa lahko katere koli vrste, na primer celo število, niz, število s plavajočo vejico ali kompleksno število. Medtem lahko slovar vsebuje zbirko, na primer seznam, nabor ali drugo vrsto slovarja. Slovar v Pythonu je ustvarjen s pomočjo par skodranih oklepajev, v katerih je vsak par ključ-vrednost ločen z vejico.
Kaj pa, če poskusite odpreti ali spremeniti določen ključ v slovarju, ki ne obstaja? No, v tem primeru bo tolmač Python sprožil napako »KeyError« in zaključil izvajanje programa.
Oglejmo si primer napake »KeyError«.
# ustvarjanje slovarjamy_dict = 1: "Pozdravljeni", 2: "Dobrodošli", 3: "LinuxHint"
# dostop do ključa, ki ne obstaja
my_dict [4]
Izhod
Za obvladovanje te napake Python ponuja privzeto vrsto izreka, slovarski razred, ki ga lahko najdete v modulu zbirk. Ta članek podrobno zajema razsodbo Pythona.
Pojasnilo in primeri neizpolnitve obveznosti
Privzeta sodba je alternativa slovarju Python. Vrne predmete tipa slovarja. Privzeta sodba je podrazred izreka. V primeru manjkajočega ključa namesto, da bi se pojavila napaka »KeyError«, je za neobstoječi ključ na voljo privzeta vrednost. Sintaksa defaultdict je naslednja:
defaultdict (default_factory)Funkcija defaultdict kot argument vzame parameter default_factory. Funkcija default_factory vrne privzeto vrednost za definirano defaultdict. Če poskusimo dostopiti ali spremeniti ključ, ki manjka, potem funkcija default_factory vrne privzeto vrednost kot rezultat. Če manjka funkcija default_factory, bo defaultdic sprožil napako »KeyError«, če manjkajo ključi.
Najprej bomo v naš skript Python implementirali privzeti ključ za dostop do obstoječih in manjkajočih ključev.
#import default default iz zbirnega modulaiz zbirk import defaultdict
#defining funkcije za vrnitev privzete vrednosti
def my_func ():
print ("Ključ ni določen")
#creating a defualtdict
# passing my_func () kot argument za privzeto razsodbo
my_dict = defaultdict (my_func)
#definiranje ključev in vrednosti
my_dict [1] = "Pozdravljeni"
my_dict [2] = "Dobrodošli"
my_dict [3] = "LinuxHint"
#accessing the values using keys
natisni (my_dict [1])
natisni (my_dict [2])
natisni (my_dict [3])
# dostop do manjkajočega ali nedoločenega ključa
my_dict [4]
Izhod
Manjka ključ [4]. Torej, namesto da bi povzročil napako »KeyError«, pokliče funkcijo default_factory, ki vrne privzeto vrednost.
Kot parameter default_factory se lahko uporablja tudi lambda funkcija, znana kot anonimna funkcija.
Nato bomo implementirali lambda funkcijo in jo poslali kot argument privzeti razsodbi.
#import default default iz zbirnega modulaiz zbirk import defaultdict
#creating a defualtdict
# podajanje funkcije Lamnda kot argument za privzeto razsodbo
my_dict = defaultdict (lambda: "Ključ ni definiran")
#definiranje ključev in vrednosti
my_dict [1] = "Pozdravljeni"
my_dict [2] = "Dobrodošli"
my_dict [3] = "LinuxHint"
#accessing the values using keys
natisni (my_dict [1])
natisni (my_dict [2])
natisni (my_dict [3])
# dostop do manjkajočega ali nedoločenega ključa
natisni (my_dict [4])
Defaultdict prikliče default_factory, da poda privzeto vrednost, funkcija __missing () __ pa privzeto vrednost. Funkcija __missing () __ je vgrajena funkcija v Pythonu, ki kot argument vzame parameter default_factory. Če parameter default_factory ni definiran, funkcija __missing () __ sproži napako »KeyError«.
Tu bomo uporabili funkcijo __missing () __ v našem skriptu Python.
#import default default iz zbirnega modulaiz zbirk import defaultdict
#defining funkcije za vrnitev privzete vrednosti
def my_func ():
print ("Ključ ni določen")
#creating a defualtdict
# passing my_func () kot argument za privzeto razsodbo
my_dict = defaultdict (my_func)
#definiranje ključev in vrednosti
my_dict [1] = "LinuxHint"
#accessing the values using keys
natisni (my_dict [1])
# dostop do manjkajočega ali nedoločenega ključa
my_dict.__pogrešano __ (2)
Izhod
Razrede seznamov in int lahko uporabite tudi kot parametra default_factory z defaultdict.
Seznam kot privzeti tovarniški parameter
Privzeta sodba se ustvari z vrednostmi seznama, ko se razredu seznama posreduje parameter default_factory.
#import default default iz zbirnega modulaiz zbirk import defaultdict
# definiranje privzete razsodbe
# predaja razred seznama kot privzeto tovarno
my_dict = defaultdict (seznam)
za i v območju (7):
moj_presoja [i].dodaj (i)
#printing vrednosti
natisni (my_dict)
Izhod
Rezultat prikazuje vrednosti na seznamu. Kot lahko vidite, je bila ustvarjena privzeta sodba, ki vsebuje ključ in vrednosti.
Cela števila kot privzeti_fabrični parameter
Če razred int posredujemo kot parameter default_factory, potem lahko ustvarimo privzeto sodbo, ki vsebuje samo cela števila. Ustvarili bomo seznam celih števil in ga nato shranili v privzeto razsodbo.
#import default default iz zbirnega modulaiz zbirk import defaultdict
# definiranje privzete razsodbe
# predaja razred int kot privzeto tovarno
my_dict = defaultdict (int)
# ustvarjanje seznama celih števil
moj_list = [1,2,3]
za i na my_list:
moj_presoja [i] + = 1
#printing vrednosti
natisni (my_dict)
Izhod
V danem izhodu so celoštevilčne vrednosti pred dvopičjem (:) ključi, medtem ko so celoštevilčne vrednosti za dvopičjem vrednosti.
Zaključek
Dafualtdict je slovarju podoben razred, ki je prisoten v modulu zbirk. Deluje kot slovar Python, vendar ne sproži "KeyError", če ključa ne najdemo. Ta članek podrobno razlaga zamudno sodbo z različnimi primeri.