Sözlük Nedir?

Python'da sözlükler (dict), anahtar-değer çiftlerini saklayan veri yapılarıdır. Her anahtar, benzersiz olmalıdır ve değerler farklı veri tiplerinde olabilir. Sözlükler, veri erişimini hızlandıran "hash" yapısını kullanır.

# Basit bir sözlük örneği
sozluk = {
    "isim": "Ahmet",
    "yas": 25,
    "meslek": "Mühendis"
}
print(sozluk)
# Çıktı: {'isim': 'Ahmet', 'yas': 25, 'meslek': 'Mühendis'}

Bu örnekte, sozluk adında bir sözlük oluşturduk ve isim, yas, meslek anahtarları ile ilişkili değerleri tanımladık.

Sözlüklerin Özellikleri

Sözlükler sırasızdır, değiştirilebilir ve anahtar-değer çiftleri içerir. Anahtarlar tekil olmalıdır, ancak değerler tekrar edebilir.

# Aynı anahtarı iki kez kullanmaya çalışalım
sozluk = {
    "isim": "Ahmet",
    "isim": "Mehmet"  # İlk değeri geçersiz kılar
}
print(sozluk)
# Çıktı: {'isim': 'Mehmet'}

Burada, ikinci isim anahtarı ilkini geçersiz kılar. Bu nedenle, anahtarların benzersiz olması önemlidir.

Sözlük Elemanlarına Erişim

Sözlüklerde belirli bir anahtarın değerine erişmek için [ ] veya .get() metodunu kullanabilirsiniz.

sozluk = {"isim": "Ahmet", "yas": 25}
print(sozluk["isim"])  # Çıktı: Ahmet
print(sozluk.get("yas"))  # Çıktı: 25

.get() metodunun kullanımı, belirtilen anahtar bulunamadığında None döndüğü için hata almaktan kaçınmak amacıyla tercih edilebilir.

print(sozluk.get("meslek", "Anahtar bulunamadı"))  # Çıktı: Anahtar bulunamadı

Sözlüklerde Eleman Ekleme ve Güncelleme

Python'da sözlüklere eleman eklemek veya var olan bir değeri güncellemek oldukça basittir.

Örnek:

sozluk = {"isim": "Ahmet"}
sozluk["yas"] = 25  # Yeni bir anahtar-değer çifti ekler
sozluk["isim"] = "Mehmet"  # Var olan bir değeri günceller
print(sozluk)
# Çıktı: {'isim': 'Mehmet', 'yas': 25}

Sözlükten Eleman Silme

Sözlüklerden eleman silmek için del ifadesi veya .pop() metodunu kullanabilirsiniz.

sozluk = {"isim": "Ahmet", "yas": 25}
del sozluk["yas"]
print(sozluk)
# Çıktı: {'isim': 'Ahmet'}

# .pop() metodu
yas = sozluk.pop("yas", "Anahtar bulunamadı")
print(yas)  # Çıktı: Anahtar bulunamadı

Tüm Sözlük Elemanlarını Listeleme

Anahtarları, değerleri veya her ikisini birden listelemek için keys(), values(), ve items() metodlarını kullanabilirsiniz.

sozluk = {"isim": "Ahmet", "yas": 25, "meslek": "Mühendis"}

# Anahtarlar
print(sozluk.keys())  
# Çıktı: dict_keys(['isim', 'yas', 'meslek'])

# Değerler
print(sozluk.values())  
# Çıktı: dict_values(['Ahmet', 25, 'Mühendis'])

# Anahtar-Değer Çiftleri
print(sozluk.items())  
# Çıktı: dict_items([('isim', 'Ahmet'), ('yas', 25), ('meslek', 'Mühendis')])

Sözlüklerde Döngü Kullanımı

Sözlüklerde döngü kullanarak tüm anahtarlar veya değerler üzerinde işlem yapabilirsiniz.

sozluk = {"isim": "Ahmet", "yas": 25}

# Anahtarlar üzerinde döngü
for anahtar in sozluk:
    print(anahtar)

# Anahtar ve değer üzerinde döngü
for anahtar, deger in sozluk.items():
    print(f"{anahtar}: {deger}")

Sözlük Kopyalama

Sözlükleri kopyalamak için .copy() metodunu kullanabilirsiniz. "=" operatörüyle yapılan atamalar, orijinal sözlüğün referansını taşır.

# Doğru Kopyalama
orijinal = {"isim": "Ahmet"}
kopya = orijinal.copy()
kopya["isim"] = "Mehmet"
print(orijinal)  # Çıktı: {'isim': 'Ahmet'}
print(kopya)    # Çıktı: {'isim': 'Mehmet'}

İç İçe Sözlükler (Nested Dictionaries)

Sözlükler, başka sözlükleri değer olarak barındırabilir. Bu tür sözlüklere iç içe sözlükler denir.

ogrenciler = {
    "ogrenci1": {"isim": "Ahmet", "yas": 20},
    "ogrenci2": {"isim": "Ayşe", "yas": 22}
}

# İç içe sözlük elemanına erişim
print(ogrenciler["ogrenci1"]["isim"])  # Çıktı: Ahmet

Sözlüklerin Avantajları

Hızlı veri erişimi: Anahtarların indekslenmesi, veri aramalarını hızlı hale getirir.
Esnek veri yapısı: Farklı veri türlerini (liste, tuple, string, vb.) depolayabilir.

Sözlük Kullanımıyla İlgili Örnekler

1. Telefon Rehberi Uygulaması:
• Kişilerin isimlerini anahtar, telefon numaralarını değer olarak saklar.

rehber = {
    "Ahmet": "0533 123 45 67",
    "Mehmet": "0544 234 56 78"
}

# Telefon numarasını almak
print(rehber.get("Ahmet", "Kayıt bulunamadı"))

2. Sınıf Notları Uygulaması
• Her öğrenci ismini anahtar, notlarını ise liste olarak değer şeklinde saklar.

sinif_notlari = {
    "Ahmet": [85, 90, 78],
    "Ayşe": [92, 88, 84],
    "Mehmet": [75, 80, 72]
}

# Ortalama hesaplama
for ogrenci, notlar in sinif_notlari.items():
    ortalama = sum(notlar) / len(notlar)
    print(f"{ogrenci} ortalama notu: {ortalama}")

Özet: Sözlüklerin Tüm Özelliklerinin Kullanıldığı Örnek

# Sözlük oluşturma ve iç içe yapı kullanımı
universite = {
    "Mühendislik": {
        "Bilgisayar Mühendisliği": {"hoca": "Dr. Ali", "ogrenci_sayisi": 120},
        "Makine Mühendisliği": {"hoca": "Dr. Ayşe", "ogrenci_sayisi": 100}
    },
    "Fen-Edebiyat": {
        "Matematik": {"hoca": "Dr. Mehmet", "ogrenci_sayisi": 80},
        "Fizik": {"hoca": "Dr. Zeynep", "ogrenci_sayisi": 60}
    }
}

# Mühendislik Fakültesi'ndeki bölümlerin hocalarını listeleme
for bolum, bilgiler in universite["Mühendislik"].items():
    print(f"{bolum} bölümünün hocası: {bilgiler['hoca']}")

# Yeni bölüm ekleme ve var olanı güncelleme
universite["Mühendislik"]["Elektrik-Elektronik Mühendisliği"] = {
    "hoca": "Dr. Veli", "ogrenci_sayisi": 90
}
universite["Fen-Edebiyat"]["Matematik"]["ogrenci_sayisi"] = 85

# Tüm fakülte ve öğrenci sayılarını listeleme
for fakulte, bolumler in universite.items():
    toplam_ogrenci = sum(bilgiler["ogrenci_sayisi"] for bilgiler in bolumler.values())
    print(f"{fakulte} fakültesinin toplam öğrenci sayısı: {toplam_ogrenci}")

Bu örnekte, Python sözlüklerinin farklı özelliklerini bir arada kullanarak üniversite verilerini organize eden bir sözlük yapısı oluşturduk ve üzerinde çeşitli işlemler yaptık.

Kapanış

Bu içerikte Python'da sözlüklerin ne olduğunu, nasıl kullanıldığını ve farklı örneklerle nasıl uygulandığını detaylı bir şekilde inceledik. Python'da veri yönetimini daha kolay ve verimli hale getirmek için sözlüklerin sunduğu avantajlardan faydalanabilirsiniz. İç içe sözlükler, eleman ekleme, silme, kopyalama gibi birçok konuyu öğrenerek, Python'da projelerinizde güçlü veri yapıları kurabilirsiniz.