Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Python Sözlükler Nasıl Kullanılır? Anahtar ve Değer Mantığı

python-sozlukler-nasil-kullanilir-anahtar-ve-deger-mantigi
Bu yazıda neler var?
  1. Python'da Sözlük Nedir?
  2. Liste mi Sözlük mü? Üç Maddelik Karar Tablosu
  3. Sözlük Oluşturma ve Köşeli Parantezle Erişim
  4. get() ile Güvenli Erişim, Ekleme ve Güncelleme
  5. pop(), keys(), values(), items()
  6. İç İçe Sözlükler: Öğrenci-Not Senaryosu
  7. Sık Sorulan Sorular

Python'da sözlük (dictionary), verileri anahtar-değer çiftleri halinde saklayan bir veri yapısıdır. Her değere, listelerdeki gibi sayısal bir sıra numarasıyla değil, kendine özgü bir anahtarla ulaşırsınız. Bu sayede "üçüncü eleman neydi" diye düşünmek yerine "kullanıcı adı neydi" gibi anlamlı sorularla veriye erişebilirsiniz. Sözlükler, verilerinizi isimlendirerek tutmak ve anahtarla hızlıca bulmak istediğinizde listelerden daha pratik bir çözüm sunar.

Python'da Sözlük Nedir?

Sözlük, süslü parantez {} içinde tanımlanan ve her elemanı bir anahtar (key) ile bir değerden (value) oluşan bir koleksiyon tipidir. Anahtarlar sözlük içinde benzersiz olmak zorundadır; aynı anahtarı iki kez kullanırsanız ikinci değer öncekinin üzerine yazılır. Değerler ise istediğiniz türde olabilir: sayı, metin, liste, hatta başka bir sözlük.

Sözlüklerin asıl gücü, bir değeri ararken listede baştan sona gezmek zorunda kalmamanızdır. Python, anahtarı doğrudan hedef değere yönlendirir, bu yüzden büyük veri kümelerinde arama işlemleri liste kullanımına göre çok daha hızlıdır. Bir kullanıcı profilini, bir ürünün fiyat bilgisini veya bir öğrencinin notlarını tutarken sözlük, verinin anlamını da yapının içine taşır.

ogrenci = {
    "ad": "Ayşe",
    "yas": 21,
    "bolum": "Bilgisayar Mühendisliği"
}

Yukarıdaki örnekte "ad", "yas" ve "bolum" anahtarlardır; karşılarındaki değerler ise bu anahtarlara karşılık gelen bilgilerdir.

Liste mi Sözlük mü? Üç Maddelik Karar Tablosu

Liste mi Sözlük mü? Üç Maddelik Karar Tablosu

Liste ve sözlük arasında seçim yaparken kendinize şu üç soruyu sormanız yeterlidir:

  • Sıra önemli mi? Verileri belirli bir dizilişte tutmanız gerekiyorsa (örneğin işlem adımları) liste daha uygundur. Sıralamanın önemli olmadığı, sadece "hangi bilgi hangi isme karşılık geliyor" sorusunun önemli olduğu durumlarda sözlük tercih edilir.
  • Anahtarla erişim gerekiyor mu? Bir değere sayısal indeks yerine anlamlı bir isimle ulaşmak istiyorsanız (örneğin "email" anahtarıyla e-posta adresine ulaşmak) sözlük kullanmalısınız.
  • Veriler birbirinden bağımsız mı yoksa ilişkili mi? Aynı türde tekrar eden öğeler (örneğin bir alışveriş listesi) için liste; birbirine bağlı ama farklı türde bilgiler (örneğin bir kişinin adı, yaşı, şehri) için sözlük daha mantıklıdır.
# Liste: sıralı ve aynı türde veriler
renkler = ["kırmızı", "mavi", "yeşil"]

# Sözlük: anahtarla erişilen, ilişkili veriler
urun = {"isim": "Klavye", "fiyat": 450}

Kısacası, verinizi "kaçıncı sırada" diye değil "hangi isimle" diye sorguluyorsanız sözlük doğru seçimdir.

Sözlük Oluşturma ve Köşeli Parantezle Erişim

Bir sözlük oluşturmak için süslü parantez içine anahtar-değer çiftlerini virgülle ayırarak yazmanız yeterlidir. Değere ulaşmak için ise anahtarı köşeli parantez içinde belirtirsiniz:

urun = {"isim": "Klavye", "fiyat": 450, "stok": 12}

print(urun["isim"])   # Klavye
print(urun["fiyat"])  # 450

Bu yöntem hızlı ve okunaklıdır ama bir riski vardır: sözlükte olmayan bir anahtarı köşeli parantezle çağırırsanız Python KeyError hatası fırlatır ve program çalışmayı durdurur.

print(urun["renk"])
# KeyError: 'renk'

Bu yüzden anahtarın kesin olarak var olduğundan eminseniz köşeli parantez kullanmak pratiktir; ancak anahtarın bulunmama ihtimali varsa bu yaklaşım programınızı kırabilir. Bir sonraki bölümde bu riski ortadan kaldıran get() yöntemini ele alacağız.

get() ile Güvenli Erişim, Ekleme ve Güncelleme

Bir sözlükte olmayan anahtara köşeli parantezle erişmeye çalışırsan KeyError alırsın. get() metodu bu riski ortadan kaldırır: anahtar varsa değerini, yoksa None (veya sen belirlediğin bir varsayılan değeri) döndürür.

urun_fiyatlari = {"elma": 12, "armut": 15}

print(urun_fiyatlari.get("elma"))        # 12
print(urun_fiyatlari.get("muz"))         # None
print(urun_fiyatlari.get("muz", 0))      # 0

İkinci parametre, anahtar bulunamadığında dönecek varsayılan değeri belirtir. Stok kontrolü, fiyat sorgulama gibi "anahtar olmayabilir" senaryolarında get() kullanmak, kodun her yerine if anahtar in sozluk kontrolü yazmaktan daha temiz bir yaklaşımdır.

Sözlüğe yeni bir anahtar eklemek ya da mevcut bir anahtarın değerini güncellemek için aynı sözdizimi kullanılır:

urun_fiyatlari["muz"] = 8       # yeni anahtar ekler
urun_fiyatlari["elma"] = 14     # mevcut anahtarı güncelle

Python burada anahtarın var olup olmadığına bakar: yoksa ekler, varsa üzerine yazar. Bu davranış hem avantaj hem de dikkat edilmesi gereken bir noktadır çünkü yanlışlıkla mevcut bir anahtarı sıfırlayabilirsin.

pop(), keys(), values(), items()

pop(), keys(), values(), items()

Bir anahtarı sözlükten çıkarıp değerini almak istediğinde pop() işine yarar. Anahtar yoksa KeyError fırlatır, bunu önlemek için ikinci parametre olarak varsayılan değer verilebilir:

stok = {"kalem": 50, "silgi": 20, "defter": 30}

silinen = stok.pop("silgi")
print(silinen)          # 20
print(stok)              # {'kalem': 50, 'defter': 30}

print(stok.pop("kitap", "yok"))   # yok, hata vermez

keys(), values() ve items() metodları sözlüğün farklı görünümlerini (view) döndürür. Bu metotların döndürdüğü nesneler sırasıyla dict_keys, dict_values ve dict_items türlerindedir; liste değildir ve sözlük değiştiğinde bu değişiklikleri yansıtan dinamik görünüm nesneleridir.

print(stok.keys())     # dict_keys(['kalem', 'defter'])
print(stok.values())   # dict_values([50, 30])
print(stok.items())    # dict_items([('kalem', 50), ('defter', 30)])

En sık kullanım alanı döngülerdir:

for urun, adet in stok.items():
    print(f"{urun}: {adet} adet")

items() sayesinde anahtar ve değere tek döngüde birlikte erişirsin, ayrıca stok.keys() üzerinde döngü kurmaya gerek kalmadan for urun in stok: yazmak da aynı sonucu verir çünkü sözlükler varsayılan olarak anahtarları üzerinde dolaşır.

İç İçe Sözlükler: Öğrenci-Not Senaryosu

Gerçek projelerde sözlüklerin içinde başka sözlükler veya listeler barındırmak yaygındır. Örneğin öğrenci adlarını, o öğrencinin aldığı notların listesiyle eşleyebiliriz:

notlar = {
    "Ayşe": [85, 90, 78],
    "Mehmet": [60, 70, 65],
    "Zeynep": [95, 92, 88],
}

def ortalama_hesapla(ogrenci):
    puanlar = notlar.get(ogrenci)
    if not puanlar:
        return f"{ogrenci} için kayıt bulunamadı."
    ortalama = sum(puanlar) / len(puanlar)
    return f"{ogrenci} ortalaması: {ortalama:.1f}"

print(ortalama_hesapla("Ayşe"))     # Ayşe ortalaması: 84.3
print(ortalama_hesapla("Ali"))       # Ali için kayıt bulunamadı.

Burada kritik nokta notlar.get(ogrenci) kullanımıdır. Köşeli parantezle notlar["Ali"] yazsaydık, olmayan bir öğrenci sorgulandığında program KeyError ile çökerdi. get() sayesinde None döner, if not puanlar kontrolü de bunu yakalayıp anlamlı bir mesaj üretir.

Tüm öğrencilerin ortalamasını tek seferde görmek istersen items() ile döngü kurman yeterli:

for ogrenci, puanlar in notlar.items():
    print(f"{ogrenci}: {sum(puanlar) / len(puanlar):.1f}")

Bu yapı, gerçek dünyadaki JSON verileriyle çalışırken de karşına çıkacağın en temel desendir: dış sözlük kimlik bilgisini tutar, iç yapı (liste ya da başka bir sözlük) detayları taşır.

Sık Sorulan Sorular

Liste ile sözlük arasındaki temel fark nedir? Liste, sırayla dizilmiş elemanları indeks numarasıyla tutar (0, 1, 2...). Sözlük ise her değeri anlamlı bir anahtarla eşleştirir. Verilere "kaçıncı sırada" değil "hangi isimle" ulaşmak istiyorsan sözlük daha uygundur.

Sözlükte anahtar olarak her şey kullanılabilir mi? Hayır. Anahtarlar değiştirilemez (immutable) türden olmalı; yani string, sayı veya tuple kullanabilirsin. Liste ya da başka bir sözlüğü anahtar olarak kullanamazsın, çünkü bunlar değiştirilebilir yapılardır ve Python bunlara sabit bir "hash" değeri atayamaz.

Aynı anahtarı iki kez tanımlarsam ne olur? Hata almazsın, ama ikinci atadığın değer birincinin üzerine yazılır. Sözlükte her anahtar tekildir, aynı anahtarı tekrar kullanmak güncelleme anlamına gelir.

Sözlükteki eleman sırası korunur mu? Python 3.7 ve sonrasında evet, sözlükler eklenme sırasını korur. Ama sözlüğü sıralı bir yapı gibi kullanmak yerine, hâlâ anahtar üzerinden erişim yapman en doğru yaklaşımdır.

Var olmayan bir anahtara köşeli parantezle erişirsem ne olur? KeyError hatası alırsın. Bu yüzden anahtarın var olup olmadığından şüphen varsa get() metodunu kullanmak, hem daha güvenli hem daha okunaklı bir çözümdür.

Sözlükler, verini anahtar-değer mantığıyla düzenlemenin en pratik yollarından biri. Temel erişim ve güncelleme metotlarını öğrendikten sonra iç içe yapılarla da rahatça çalışabilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara