Sözlük Bir Arama Tablosudur
Listeler konuma göre indekslenir. Sözlükler ise anahtara göre indekslenir — genellikle bir string ya da sayı — ve her anahtar bir değere eşlenir. Bu tek kayma büyük bir program kategorisinin kilidini açar: envanterler, konfigürasyonlar, JSON payload'ları, kullanıcı profilleri, önbellekler.
Anahtarlar ve değerler neredeyse her şey olabilir. Anahtarlar hashlenebilir olmalı (yani: sayılar, stringler, tuple'lar; listeler ya da başka dict'ler değil). Değerlerde bir kısıtlama yoktur — bir dict, başka dict'ler veya listeler dahil her şeyi tutabilir.
Sözlük Oluşturmak
Birkaç yol, her biri yerinde:
Değerleri Okumak
İki yol var ve seçim önemli:
Niyete göre seç:
[]kullan anahtar orada olmak zorundaysa. Yoksa, bu bir hatadır ve sesli bir hata mesajı istersin..get()kullan "yok" geçerli bir durumsa. try/except olmadan varsayılan yazmanı sağlar.
Ekleme, Güncelleme, Silme
Bir anahtara atamak ya onu oluşturur ya da günceller:
update() başka bir dict'i ya da çift iterable'ını birleştirir:
overrides içindeki ortak anahtarlar, settings içindekilerin üzerine yazılır.
Bir Anahtarı Kontrol Etmek
in anahtarları kontrol eder, değerleri değil:
Özellikle değerleri kontrol etmek için user.values() kullan:
Sözlük Üzerinde İterasyon
Üzerinde döngü kurabileceğin üç görünüm var:
Çoğu zaman başvuracağın .items()'dır — paketlenmiş çifti, kullanıma hazır şekilde verir.
Modern Python'da (3.7+) iterasyon sırası ekleme sırasıyla eşleşir. Bir dict "sihirli bir torba" değildir — önce a, sonra b, sonra c eklersen, iterasyon onları bu sırada verir. Bu, güvenebileceğin bir dil garantisidir.
Sözlüğü Nasıl Sıralarsın
Sözlükler ekleme sırasını korur, dolayısıyla bir dict'i "sıralamak" aslında anahtarları istediğin sırada eklenmiş yeni bir dict inşa etmek demektir:
sorted() bir çiftler listesi döner; bunu dict(...) ile sararak yeni sıralamayla bir sözlüğü yeniden inşa edersin. Yalnızca sıralı çiftlere ihtiyacın varsa (dict değil) dıştaki dict() çağrısını atla.
İki Sözlüğü Birleştirmek
Python 3.9+ sana | operatörünü verir:
Anahtar çakışmalarında sağdaki dict'in değerleri kazanır. .update() onun yerinde eşdeğeridir. Daha eski Python sürümlerinde {**defaults, **overrides} kullan.
setdefault Kalıbı
Yaygın bir ihtiyaç: "anahtar varsa değerini kullan; yoksa bir varsayılan ayarla ve sonra kullan."
Ya da daha iyisi, collections.Counter kullan:
Counter, varsayılan olarak sayma yapan bir dict alt sınıfıdır. Ne zaman olay sayısını sayıyorsan doğru seçim odur.
Dictionary Comprehension'lar
List comprehension'larla paralel, ama dict inşa etmek için:
Aynı kurallar, ama süslü parantezlerin içinde key: value ile.
Dict JSON'un İkizidir
Python dict'leri JSON nesneleriyle neredeyse bire bir hizalanır. Aralarında dönüşüm tek bir çağrıdır:
Bu yüzden dict'ler web çalışmalarında her yerde karşına çıkar — API istek ve yanıtların temelde arada ağ olan dict manipülasyonudur.
Pratik Bir Örnek
Bir kullanıcı profilini takip eden minik bir konfigürasyon benzeri program:
İç içe dict'ler, değiştirilebilir değerler, varsayılanla .get() — kayıt biçimli herhangi bir veri için temel araç seti.
Devam
Listeler, tuple'lar, set'ler, dict'ler. Bu dört koleksiyon elinde olduğunda, erken dönemde karşılaşacağın hemen her veriyi modelleyebilirsin. Sırada list comprehension'ı öğreneceğiz — Python'un bir koleksiyonu bir diğerine dönüştürmenin kompakt yolu.
Sıkça Sorulan Sorular
Python'da sözlük nedir?
Sözlük, anahtar-değer çiftlerinden oluşan bir koleksiyondur. Bir değeri anahtarına göre ararsın — prices[0] yerine prices['apple']. Sözlüklerin okuma ve yazması hızlıdır, anahtarlar benzersiz olmalıdır ve modern Python'da ekleme sırasını korurlar.
Python sözlüğüne nasıl anahtar eklerim?
Ona atama yap: my_dict['new_key'] = 'new value'. Anahtar zaten varsa değer üzerine yazılır. Yoksa eklenir. "Ekleme" ve "güncelleme" arasında fark yoktur — aynı söz dizimidir.
dict[key] ile dict.get(key) arasındaki fark nedir?
Anahtar yoksa dict[key] KeyError fırlatır. dict.get(key) ise onun yerine None (ya da verdiğin bir varsayılan) döndürür. Eksik anahtarlar beklenen ve normal bir durumsa .get() kullan; eksik bir anahtar bir hatayı işaret ediyorsa [key] kullan.