logo

Python'da defaultdict

Sözlük, Python'da haritalar gibi veri değerlerini depolamak için kullanılan sırasız bir veri değerleri koleksiyonudur. Sözlük, diğer veri türleri gibi tek bir değeri öğe olarak tutmak yerine anahtar/değer çiftlerini tutar. Sözlükte uygulanan anahtarın benzersiz ve değişmez olması gerekir. Yani, Python tuple'ı bir anahtar olabilir, ancak Python listesi sözlükte bir anahtar olamaz. {} küme parantezlerinin içine bir dizi öğe yerleştirerek bir sözlük oluşturabiliriz, virgül ',' değerleri ayırabilir.

Örnek 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]) 

Çıktı:

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

Ancak o zaman 5. anahtar değerini yazdırmaya çalışırsak hatayı alırız çünkü 'Dict_1' 5. anahtar değerini içermiyor.

Örnek 2:

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

Çıktı:

 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 

ne zaman anahtar hatası gündeme geldiğinde kullanıcılar için sorun haline gelebilir. Python'un konteyner benzeri başka bir sözlüğünü kullanarak bu hatayı aşabiliriz. Varsayılan dikte . Kullanıcılar bu sözlüğü içinde bulabilirler. 'koleksiyonlar' modülü.

Varsayılan dikte

Defaultdict, 'koleksiyonlar' modülünün içinde bulunan bir konteynere benzeyen bir Python sözlüğüdür. Sözlük benzeri nesneyi döndürmek için kullanılan sözlük sınıfının bir alt sınıfıdır. Hem defaultdict hem de sözlük aynı işlevselliğe sahiptir; ancak defaultdict, kullanıcı tarafından oluşturulan sözlükte bulunmayan Anahtar için varsayılan bir değer sağladığından hiçbir zaman KeyError değerini yükseltmez.

Sözdizimi:

 defaultdict(default_factory) 

Parametreler:

    default_factory:default_factory() işlevi, kullanıcı tarafından tanımlanan sözlük için kullanıcı tarafından belirlenen varsayılan değeri döndürür. Bu argüman yoksa sözlük KeyError'ı yükseltir.

Örnek:

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

Çıktı:

 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 

Defaultdict'in İç Çalışması

defaultdict kullandığımızda standart sözlük işlemlerine ek olarak ek bir yazılabilir örnek değişkeni ve bir yöntem elde ediyoruz. Yazılabilir örnek değişkeni default_factory parametresidir ve __eksik__ yöntemdir.

    default_factory:default_factory() işlevi, kullanıcı tarafından tanımlanan sözlük için kullanıcı tarafından belirlenen varsayılan değeri döndürür.

Örnek:

Java dize birleştirme
 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']) 

Çıktı:

 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>
    __eksik__():__missing__() işlevi, sözlüğe varsayılan değeri sağlamak için kullanılır. __missing__() işlevi argüman olarak default_factory'yi alır ve eğer argüman Yok olarak ayarlanırsa KeyError değeri yükselir; aksi halde verilen anahtar için varsayılan bir değer sağlayacaktır. Bu yöntem esas olarak şu şekilde adlandırılır: __getitem__() İstenilen anahtar bulunamadığında dict sınıfının işlevi. __getitem__() işlevi, __missing__() işlevinde bulunan değeri yükseltir veya döndürür.

Örnek:

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

Çıktı:

 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>

'Liste' default_factory olarak nasıl kullanılır?

Bir liste sınıfını default_factory argümanı olarak iletebiliriz ve bu, liste formatında ayarlanan değerlerle bir defaultdict oluşturacaktır.

Örnek:

 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) 

Çıktı:

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

'int' default_factory olarak nasıl kullanılır?

İnt sınıfını default_factory argümanı olarak iletebiliriz ve bu, varsayılan değeri sıfır olarak ayarlanmış bir defaultdict yaratacaktır.

Örnek:

 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) 

Çıktı:

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

Çözüm

Bu dersimizde Python'da defaultdict'i ve default_factory parametresini kullanarak defaultdict üzerinde farklı işlemleri nasıl gerçekleştirebileceğimizi tartıştık.