Mesele:
Sözlükler (dict) — Python'un temel veri tiplerinden biri olup "anahtar-değer" yapısını temsil eder. Sözlükler Python'un ilk sürümünden beri vardır, ancak içsel uygulamaları ve davranış özellikleri sürekli olarak geliştirilmektedir (örneğin, Python 3.7 ile birlikte eklenme sırası garanti edilmiştir).
Sorun:
Sözlüğün iç yapısını anlamak, etkili kod yazmak için gereklidir. İnterpolasyon türlerinde anahtarlar kullanıldığında, iç içe geçmiş sözlükler kopyalandığında ve standart dışı işlemler yapıldığında hatalar ortaya çıkabilir.
Çözüm:
Sözlük, bir hash tablosu olarak uygulanmıştır, anahtarların hashlenebilir olması gerekmektedir (değişmez). Anahtara göre değere erişim yaklaşık O(1) süreyle çalışır, ancak belirli koşullarda farklılıklar ortaya çıkabilir — örneğin, çakışmalar veya büyük veri hacimleri ile çalışıldığında.
Kod örneği:
person = {'name': 'Alice', 'age': 30} person['city'] = 'Moskova' print(person['name']) # Alice
Anahtar özellikler:
Dict içinde anahtar olarak liste (list) kullanılabilir mi?
Hayır, listeler değişkendir ve hashlenebilir değildir. Liste kullanma girişimi hata verecektir.
d = {} d[[1, 2, 3]] = 'value' # TypeError: hashlenemeyen tür: 'list'
Eşit içerikli iki tuple anahtar olarak kullanılırsa ne olur?
Eğer her iki tuple aynı verileri içeriyorsa ve kendileri değişmezse, eşit kabul edilirler ve sözlükteki anahtarlar aynı olur:
t1 = (1, 2) t2 = (1, 2) d = {t1: 'a'} print(d[t2]) # 'a'
Kopyalama işlemi sırasında sözlük elemanlarının sırası değişir mi?
Python 3.7 ve üzeri sürümlerde sıra korunur. Daha eski sürümlerde, dolaşım sırası garanti edilmez.
d1 = {'a': 1, 'b': 2} d2 = dict(d1) print(list(d2)) # ['a', 'b']
dict.get() kullanımını None kontrolü yapmadan aşırıya kaçmak, eğer değer == None ise beklenmedik hatalara yol açabilir.Programcılar, anahtar olarak listeleri tutarken, Python'da tuple ve list'in eşdeğer olduğunu düşünerek hata yaparlar. "unhashable type" gibi istisnalar alırlar.
Avantajlar:
Hızla bir şeyleri "kolayca denemek" için her türlü yapıyı kullanabiliriz.
Dezavantajlar:
Çalışma zamanı hataları, veri işleme sırasında hatalar.
Anahtar olarak yalnızca değişmez (hashlenebilir) nesneler kullanılır, tuple'lar değişken içermeyecek şekilde tasarlanmıştır.
Avantajlar:
Anahtara göre hızlı arama, yapının güvenilirliği, kolay işlem ve kopyalama.
Dezavantajlar:
Veriler karmaşık olduğunda, yapıyı değişmez forma (örneğin, tuple içinde seri hale getirme) dönüştürmek için ek işleme gerekebilir.