Python, verileri verimli bir şekilde kaydetmek ve yönetmek için listeler, demetler ve sözlükler gibi birçok yerleşik veri yapısı sunar. Sözlükler, verileri anahtar/değer çiftleri olarak kaydetmenin kolay bir yolunu sağlar. Anahtar bir dizin görevi görür ve verileri almak için kullanılır. Anahtarlar, sözlük boyunca benzersiz ve değişmez olmalıdır. Bir anahtarın değeri tamsayı, dize, kayan noktalı sayı veya karmaşık sayı gibi herhangi bir türden olabilse de, anahtarlar çoğunlukla dizeler ve tam sayılardır. Bu arada, bir sözlük, bir liste, demet veya başka bir tür sözlük gibi bir koleksiyon içerebilir. Python'da bir sözlük, her bir anahtar/değer çiftinin virgülle ayrıldığı bir çift küme parantez kullanılarak oluşturulur.
Var olmayan bir sözlükte belirli bir anahtara erişmeye veya bunları değiştirmeye çalışırsanız ne olur?? Bu durumda, Python yorumlayıcısı “KeyError” hatasını yükseltecek ve programın yürütülmesini sonlandıracaktır.
“KeyError” hatasının bir örneğine bakalım.
#sözlük oluşturmamy_dict= 1:"Merhaba",2:"Hoş Geldiniz",3:"LinuxHint"
#var olmayan bir anahtara erişme
my_dict[4]
Çıktı
Bu hatayı işlemek için Python, koleksiyon modülünde bulunabilen bir sözlük sınıfı olan defaultdict tipini sağlar. Bu makale Python defaultdict'i ayrıntılı olarak kapsar.
defaultdict açıklaması ve örnekleri
defaultdict, Python sözlüğünün alternatifidir. Sözlük türü nesneleri döndürür. defaultdict, dict öğesinin bir alt sınıfıdır. Eksik bir anahtar olması durumunda, bir "KeyError" hatası oluşturmak yerine, var olmayan anahtar için varsayılan değer sağlanır. defaultdict sözdizimi aşağıdaki gibidir:
defaultdict(default_factory)defaultdict işlevi, default_factory parametresini argüman olarak alır. default_factory işlevi, tanımlanan defaultdict için varsayılan değeri döndürür. Eksik bir anahtara erişmeye veya değiştirmeye çalışırsak, default_factory işlevi sonuç olarak varsayılan değeri döndürür. default_factory işlevi eksikse, herhangi bir eksik anahtar varsa defaultdic bir “KeyError” hatası verir.
İlk olarak, hem mevcut hem de eksik anahtarlara erişmek için Python betiğimizde bir defaultdic uygulayacağız.
#varsayılanı koleksiyon modülünden içe aktarkoleksiyonlardan import defaultdict
#varsayılan değeri döndürmek için bir işlev tanımlama
tanım my_func():
print("Anahtar tanımlı değil")
#defualtdict oluşturma
#my_func() öğesini defaultdict için bir argüman olarak geçirme
my_dict =defaultdict(my_func)
#anahtarları ve değerleri tanımlama
my_dict[1]="Merhaba"
my_dict[2]="Hoş Geldiniz"
my_dict[3]="LinuxHint"
#anahtarları kullanarak değerlere erişme
print(my_dict[1])
print(my_dict[2])
print(my_dict[3])
#eksik veya tanımlanmamış anahtara erişim
my_dict[4]
Çıktı
[4] eksik anahtardır. Bu nedenle, bir "KeyError" hatası oluşturmak yerine, varsayılan değeri döndüren default_factory işlevini çağırır.
Anonim işlev olarak bilinen bir lambda işlevi, default_factory parametresi olarak da kullanılabilir.
Ardından, bir lambda işlevi uygulayacağız ve onu defaultdict'e bir argüman olarak ileteceğiz.
#varsayılanı koleksiyon modülünden içe aktarkoleksiyonlardan import defaultdict
#defualtdict oluşturma
#Lamnda işlevini defaultdict için bir argüman olarak geçirme
my_dict =defaultdict(lambda:"Anahtar tanımlı değil")
#anahtarları ve değerleri tanımlama
my_dict[1]="Merhaba"
my_dict[2]="Hoş Geldiniz"
my_dict[3]="LinuxHint"
#anahtarları kullanarak değerlere erişme
print(my_dict[1])
print(my_dict[2])
print(my_dict[3])
#eksik veya tanımlanmamış anahtara erişim
print(my_dict[4])
defaultdict, varsayılan değeri sağlamak için default_factory'yi çağırır, ancak __missing()__ işlevi varsayılan değeri sağlar. __missing()__ işlevi, Python'da default_factory parametresini argüman olarak alan yerleşik bir işlevdir. default_factory parametresi tanımlı değilse, __missing()__ işlevi “KeyError” hatasını yükseltir.
Burada Python betiğimizde __missing()__ işlevini kullanacağız.
#varsayılanı koleksiyon modülünden içe aktarkoleksiyonlardan import defaultdict
#varsayılan değeri döndürmek için bir işlev tanımlama
tanım my_func():
print("Anahtar tanımlı değil")
#defualtdict oluşturma
#my_func() öğesini defaultdict için bir argüman olarak geçirme
my_dict =defaultdict(my_func)
#anahtarları ve değerleri tanımlama
my_dict[1]="LinuxHint"
#anahtarları kullanarak değerlere erişme
print(my_dict[1])
#eksik veya tanımlanmamış anahtara erişim
my_dict.__eksik__(2)
Çıktı
Liste ve int sınıfları, defaultdict ile default_factory parametreleri olarak da kullanılabilir.
default_factory Parametresi olarak listele
Defaultdict, liste sınıfı bir default_factory parametresi iletildiğinde liste değerleriyle oluşturulur.
#varsayılanı koleksiyon modülünden içe aktarkoleksiyonlardan import defaultdict
# defaultdict tanımlama
# liste sınıfını default_factory olarak geçiyor
my_dict = defaultdict(liste)
i aralığında (7) için:
my_dict[i].ekle(i)
#değerleri yazdırma
yazdır(my_dict)
Çıktı
Çıktı, listedeki değerleri gösterir. Gördüğünüz gibi, anahtarı ve değerleri içeren bir defaultdict oluşturuldu.
default_factory Parametresi olarak tam sayılar
int sınıfını default_factory parametresi olarak geçirirsek, sadece tamsayıları içeren bir defaultdict oluşturabiliriz. Bir tamsayı listesi oluşturacağız ve ardından onu defaultdict'e kaydedeceğiz.
#varsayılanı koleksiyon modülünden içe aktarkoleksiyonlardan import defaultdict
# defaultdict tanımlama
# int sınıfını default_factory olarak geçirme
my_dict = defaultdict(int)
#tamsayılar listesi oluşturma
my_list=[1,2,3]
my_list'teki i için:
my_dict[i]+=1
#değerleri yazdırma
yazdır(my_dict)
Çıktı
Verilen çıktıda iki nokta üst üste (:) işaretinden önceki tamsayı değerler anahtar, iki nokta üst üste işaretinden sonraki tamsayı değerler ise değerlerdir.
Sonuç
Dafualtdict, koleksiyon modülünde bulunan sözlük benzeri bir sınıftır. Python sözlüğü gibi çalışır ancak bir anahtar bulunmadığında bir "KeyError" oluşturmaz. Bu makale, defaultdict'i çeşitli örneklerle ayrıntılı olarak açıklamaktadır.