Python'da Defaultdict'i Nasıl ve Ne Zaman Kullanmalısınız?
Yayınlanan: 2022-10-06Bu öğreticide, Python sözlükleriyle çalışırken KeyError'ları daha iyi işlemek için Python'un koleksiyon modülünden defaultdict'i nasıl kullanacağınızı öğreneceksiniz.
Python'da sözlük, verileri anahtar/değer çiftlerinde depolayan güçlü bir yerleşik veri yapısıdır. Sözlüğe dokunmak ve değerlere erişmek için tuşları kullanacaksınız.
Ancak, Python betiğinizde kod yürütme sırasında değiştirilen birden çok sözlüğünüz olduğunda, genellikle KeyErrors ile karşılaşırsınız. Ve bunlarla başa çıkmanın birkaç farklı yolu var.
Bu eğitimde şunları öğreneceksiniz:
- KeyErrors nedir ve neden ortaya çıkarlar?
- KeyErrors nasıl işlenir
- Eksik anahtarları daha iyi işlemek için yerleşik dict sınıfından miras alan bir alt sınıf olan Python'un defaultdict'i nasıl kullanılır?
Hadi başlayalım!
Python'da KeyErrors Nedir?

Python sözlüğü tanımlarken şunlara dikkat etmelisiniz:
- Anahtarlar benzersiz olmalıdır - tekrarlama olmadan.
- Bir sözlüğün anahtarları olarak mevcut bir yinelenebilir öğeyi kullanırken, tuple gibi değişmez bir koleksiyon kullanmayı tercih etmelisiniz.
Yani bir anahtar yalnızca sözlükte mevcutsa geçerlidir; aksi takdirde KeyErrors'a yol açar.
Anahtarların kitapların adları ve değerlerin yazarların adları olduğu aşağıdaki books_authors sözlüğüne bakın.
Bu öğreticiyle birlikte bir Python REPL'de kod yazabilirsiniz.
books_authors = { 'Deep Work':'Cal Newport', 'Hyperfocus':'Chris Bailey', 'Pivot':'Jenny Blake', 'The Happiness Equation':'Neil Pasricha' }Yazarın adına erişmek için (kitabın adı) tuşunu kullanabilirsiniz.
books_authors['Hyperfocus'] 'Chris Bailey' Sözlükteki tüm anahtar/değer çiftlerine erişmek için, aşağıda gösterildiği gibi, sözlük nesnesindeki items() yöntemini çağırabilirsiniz:
for book,author in books_authors.items(): print(f"'{book}' by {author}") 'Deep Work' by Cal Newport 'Hyperfocus' by Chris Bailey 'Pivot' by Jenny Blake 'The Happiness Equation' by Neil PasrichaSözlükte bulunmayan bir anahtarın değerine erişmeye çalışırsanız, Python yorumlayıcısı bir KeyError oluşturur. Var olmayan anahtarların, yani 'Grit' ve 'var olmayan anahtar' değerlerine erişmeye çalıştığımızda KeyError ile karşılaşıyoruz.
books_authors['Grit'] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-6-e1a4486f5ced> in <module> ----> 1 books_authors['Grit'] KeyError: 'Grit' books_authors['non-existent-key'] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-7-a3efd56f69e5> in <module> ----> 1 books_authors['non-existent-key'] KeyError: 'non-existent-key'Peki Python'da KeyErrors ile nasıl başa çıkıyorsunuz?
Bunu yapmanın birkaç yolu vardır ve bunları bir sonraki bölümde öğreneceğiz.
Python'da Anahtar Hataları Nasıl İşlenir?

KeyErrors'ı aşağıdakileri kullanarak nasıl ele alacağımızı öğrenelim:
- If-else koşullu ifadeler
- Try-hariç bloklar
- Sözlük yöntemi
.get()
#1. If-Else Koşullu İfadelerini Kullanma
Python'da KeyErrors ile başa çıkmanın en basit yollarından biri, if-else koşullu ifadelerini kullanmaktır.
Python'da if-else ifadeleri aşağıdaki genel sözdizimine sahiptir:
if condition: # do this else: # do something else- Koşul
Trueise,ifgövdesindeki ifadeler yürütülür ve - Koşul
Falseise,elsegövdesindeki ifadeler yürütülür.
Bu örnekte koşul, anahtarın sözlükte bulunup bulunmadığını kontrol etmektir.
Anahtar sözlükte varsa, in operatörü True değerini döndürür ve body yürütülürse karşılık gelen değeri yazdırır.
key = 'The Happiness Equation' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Neil Pasricha Anahtar sözlükte yoksa, in operatörü False döndürür ve else gövdesi yürütülür. Anahtarın bulunmadığına dair bir mesaj yazdırır.
key = 'non-existent-key' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Sorry, this key does not exist!#2. Try-Except İfadelerini Kullanma

KeyError'ı işlemek için başka bir yaygın yöntem Python'da try-except deyimlerini kullanmaktır.
Aşağıdaki kod bloğunu okuyun:
key = 'non-existent-key' try: print(books_authors[key]) except KeyError: print('Sorry, this key does not exist!')- Try bloğu, sağlanan anahtara karşılık gelen değeri almaya çalışır.
- Anahtar mevcut değilse, yorumlayıcı, istisna bloğu içinde bir istisna olarak ele alınan bir KeyError oluşturur.
#3. .get() Yöntemini Kullanma
Python'da, eksik anahtarları işlemek için yerleşik sözlük yöntemi .get()'i kullanabilirsiniz.
get()yöntemini kullanmak için genel sözdizimidict.get(key,default_value)şeklindedir; buradadictPython'da geçerli bir sözlük nesnesidir.– Anahtar sözlükte varsa,
get()yöntemi değeri döndürür.
– Aksi takdirde, varsayılan değeri döndürür.
Bu örnekte anahtarlar, değerlerine erişmek istediğimiz keys bir listesidir. books_authors sözlüğünden karşılık gelen değerleri almak için anahtarlar listesinde dolaşıyoruz.
Burada, varsayılan değer olarak 'yok' ile .get() yöntemini kullandık.
keys = ['Grit','Hyperfocus','Make Time','Deep Work'] for key in keys: print(books_authors.get(key,'Does not exist'))Yukarıdaki kodda:

-
books_authorssözlüğünde bulunan anahtarlar için .get.get()yöntemi karşılık gelen değerleri döndürür. - Bu durumda, 'Grit' ve 'Make Time' anahtarları mevcut olmadığında, .get() yöntemi 'Var değil' varsayılan değerini döndürür.
# Output Does not exist Chris Bailey Does not exist Cal NewportYukarıdaki yöntemlerin tümü, önemli hataların ele alınmasında bize yardımcı olur. Ancak, ayrıntılıdırlar ve eksik anahtarları açıkça ele almamızı gerektirirler. Normal bir sözlük yerine bir defaultdict kullanarak bu işlemi basitleştirebilirsiniz.
Python'da Defaultdict

defaultdict, sözlük ( dict ) sınıfının bir alt sınıfıdır. Bu yüzden bir Python sözlüğünün davranışını devralır. Ayrıca, eksik anahtarları yerel olarak da işler.
defaultdict , collections modülünün içinde Python standart kitaplığında yerleşik olarak bulunan bir kapsayıcı veri türüdür.
Yani onu çalışma ortamınıza aktarmalısınız:
from collections import defaultdict defaultdict kullanmak için genel sözdizimi:
defaultdict(default_factory) default_factory özniteliği olarak int, float veya list gibi bir çağrılabilirliği belirtebilirsiniz. default_factory için bir değer sağlamazsanız, varsayılan olarak None olur.
Aradığınız anahtar bulunmadığında, __missing__() yöntemi tetiklenir ve default_factory varsayılan değeri çıkarır. Daha sonra bu varsayılan değeri döndürür.
Özetle:
- Python'da, bir
defaultdict, anahtar mevcut olmadığında varsayılan değeri döndürür. - Ayrıca, bu anahtar-varsayılan değer çiftini daha sonra değiştirebileceğiniz sözlüğe ekler.
Python Defaultdict Örnekleri

Ardından, Python defaultdict'in nasıl çalıştığını anlamak için birkaç örnek kodlayacağız.
Varsayılan Tamsayı Değeri ile Python'da Defaultdict
İlk olarak, collections modülünden defaultdict içe aktarın.
from collections import defaultdict import random Bir defaultdict prices oluşturalım.
prices = defaultdict(int) Şimdi fruits listesinin öğelerini anahtar olarak kullanarak prices sözlüğünü dolduruyoruz. Ve değerleri elde etmek için price_list rastgele değerleri örnekliyoruz.
price_list = [10,23,12,19,5] fruits = ['apple','strawberry','pomegranate','blueberry'] for fruit in fruits: prices[fruit] = random.choice(price_list) Şimdi, prices defaultdict'indeki anahtar/değer çiftlerine bir göz atalım.
print(prices.items()) dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)]) Normal bir Python sözlüğü gibi, prices defaultdict değerlerine tuşları kullanarak erişebilirsiniz:
prices['apple'] # 23Şimdi, diyelim ki 'portakal' olmayan bir meyvenin fiyatına erişmeye çalışalım. Sıfırın varsayılan değerini döndürdüğünü görüyoruz.
prices['orange'] # 0Sözlüğü yazdırırsak, varsayılan tamsayı değeri sıfır olan yeni bir 'turuncu' anahtarının eklendiğini görürüz.
print(prices.items()) dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])Varsayılan Değer olarak Liste ile Python'da Defaultdict
students_majors listelerin defaultdict bir ifadesi olarak tanımlayalım. Binbaşıların isimleri anahtardır. Ve değerler, matematik, ekonomi, bilgisayar bilimi ve daha fazlası gibi her bir ana dalda öğrenim gören öğrencilerin listeleridir.
from collections import defaultdict students_majors = defaultdict(list)'Ekonomi'ye karşılık gelen öğrenci listesine erişmeye çalışırsak, defaultdict boş bir liste döndürür; anahtar hata yok!
students_majors['Economics'] # [] Artık 'Ekonomi' majör ile eşlenmiş boş bir listemiz var. Böylece şimdi liste yöntemini .append() kullanarak bu listeye öğeler ekleyebiliriz.
students_majors['Economics'].append('Alex') students_majors varsayılan sözlüğünde 'Ekonomi' için bir giriş oluşturuldu.
print(students_majors) defaultdict(<class 'list'>, {'Economics': ['Alex']})Ekonomi anadalıyla eşleşen listeye daha fazla öğrenci ekleyebilir, yeni bir anadal ekleyebilir ve çok daha fazlasını yapabilirsiniz!
students_majors['Economics'].append('Bob') students_majors['Math'].append('Laura') print(students_majors) defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})Çözüm
Umarım bu eğitim, Python'da defaultdict'i nasıl ve ne zaman kullanmanız gerektiğini anlamanıza yardımcı olmuştur. Bu öğreticideki kod örneklerini çalıştırdıktan sonra, gerektiğinde projelerinizde tercih edilen veri yapısı olarak defaultdict kullanmayı deneyebilirsiniz.
İşte bu eğitimde öğrendiklerinizin bir özeti.
- Bir Python sözlüğüyle çalışırken, genellikle KeyErrors ile karşılaşırsınız.
- Bu tür KeyError'ları işlemek için birkaç ayrıntılı yöntem kullanabilirsiniz. Koşullu ifadeleri, try-except bloklarını veya .get() yöntemini kullanabilirsiniz. Ancak, koleksiyon modülündeki defaultdict veri türü, bu KeyError işlemeyi basitleştirebilir.
- defaultdict(default_factory) öğesini kullanabilirsiniz, burada default_factory geçerli bir çağrılabilir.
- Anahtar defaultdict'te bulunmadığında, varsayılan değer ( default_factory 'dan çıkarılır) ve anahtar, defaultdict'e eklenir.
Ardından, Python harita işleviyle ilgili eğiticiye göz atın.
