Listelerdeki değerler dizi mantığıyla çalışıyordu. Yani her elemanın index numarası ve değeri vardı. Dolayısıyla sıralı ve kapalı bir yapıdaydı. Sözlüklerde veriler anahtar - değer ilişkisiyle tutulur. Anahtarlar bir nevi listelerdeki index numaraları yerine geçer ancak sözlükler sıralı bir yapıda değildir.

Sözlükler (Dictionaries)

JSON duydunuz mu hiç? Ya da javascript objeleri ile çalıştınız mı? Python'da sözlükler tıpkı bunlar gibidir. Küme parantezleriyle tanımlanır ve parantezler içine anahtarlar (key) ve değerler (value) girilir. Aşağıda örnek tanımlamaları görüyorsunuz.

bos = {}
dolu = { "anahtar": "değer"}

Sözlük anahtarları string olmalıdır ancak değerler herhangi bir tipte olabilir. Bir sözlüğü direkt print ederseniz tüm değerlerini görebilirsiniz.

#!/usr/bin/python
#-*- coding:utf-8 -*-

ogrenci = { "ad": "umut", "soyad": "coşkun", "no": 2012230, "mezun": False }

print ogrenci

Sözlük içindeki bir anahtarın değerine ulaşmak için köşeli parantezler [] içine anahtar yazılır.

ogrenci = { "ad": "umut", "soyad": "coşkun", "no": 2012230, "mezun": False }

print ogrenci["ad"]

Farklı tiplerde değişken kullandıysanız bir metinle birleştirip yazdırmadan önce str fonksiyonuyla string tipine çevirmelisiniz.

ogrenci = { "ad": "umut", "soyad": "coşkun", "no": 2012230, "mezun": False }

print "Adı: " + ogrenci["ad"]
print "Soyadı: " + ogrenci["soyad"]
print "Okul Numarası: " + str(ogrenci["no"])

Aşağıda öğrencinin okulu bitirme durumuna göre iki farklı mesaj gösterdik.

#!/usr/bin/python
#-*- coding:utf-8 -*-

ogrenci = { "ad": "umut", "soyad": "coşkun", "no": 2012230, "mezun": False }

print("Merhaba, {} {}. ".format(ogrenci["ad"], ogrenci["soyad"]))

if ogrenci["mezun"]:
 print("Okulu bitirdin. Okul numaranı hatırlıyor musun?")
 print("Numaran: {}".format(ogrenci["no"]))
else:
 print("Sürünmeye devam...")

Format fonksiyonu string içindeki {} karakterlerinin yerini değişkenlerle doldurmak için kullanılır. İşaretlenen yerlere sırasıyla parametre olarak verilen değişkenler yerleştirilir. Eğer ilk defa gördüyseniz biraz dikkatli inceleyin ve alışkanlık haline getirin.

Değer Atama

Bir anahtarın değerini değiştirmek için yine eşittir = kullanılır.

ogrenci = {
 "ad": "umut",
 "soyad": "coşkun"
}

print("Öğrenci adı: {}".format(ogrenci["ad"]))

ogrenci["ad"] = "çağdaş"

print("Öğrenci yeni adı: {}".format(ogrenci["ad"]))

Değer atamak için bir anahtarın oluşturulma esnasında belirlenmiş olması gerekmez. Önceden var olmayan bir anahtara değer verirseniz otomatik olarak oluşur.

ogrenci = {
 "ad": "umut",
 "soyad": "coşkun"
}

ogrenci["kurum"] = "akdeniz universitesi"

print ogrenci["kurum"]

Değer Silme

Sözlük içindeki bir anahtarı komple silmek (boşaltmak değil) istiyorsanız del komutunu kullanabilirsiniz. Örneğin aşağıdaki örnekte soyad anahtarını sildikten sonra yazdırmaya çalıştığımız için KeyError yani anahtar hatası oluşur. Bu hata sadece silinenler için değil, hiç var olmayan anahtarlar için de aynıdır.

ogrenci = {
 "ad": "umut",
 "soyad": "coşkun"
}

del ogrenci["soyad"]

print ogrenci["soyad"]

Tüm anahtarları ve değerleri silmek için clear methodunu kullanabiliriz.

ogrenci = {"ad": "umut" }

print ogrenci

ogrenci.clear()

print ogrenci

Keys ve Values Methodları

Tahmin edeceğiniz keys sözlük içindeki anahtarları, values değerleri bir liste olarak döndürür. Aşağıdaki örnekte direkt yazdırarak ya da döngü ile kullanarak bir örnek yaptık.

#!/usr/bin/python
#-*- coding:utf-8 -*-

sepet = { "makarna": 2, "ekmek": 1, "sigara": 8 }

print("Sepetinizdeki ürünler: ")
print(sepet.keys())

toplam = 0

for fiyat in sepet.values():
 toplam += fiyat

print("Toplam fiyat: {} TL".format(toplam))

Listeleme

Sözlük içindeki items methodu tüm anahtar ve değerleri liste olarak döndürür. Bu sayede sözlük içindeki tüm öğeleri öğrenebiliriz.

sepet = { "makarna": 2, "ekmek": 1, "sigara": 8 }

print("-- Fiyatlar")

for urun, fiyat in sepet.items():
 print ("{} fiyatı: {} TL".format(urun, fiyat))

Anahtar Kontrolü

Sözlük içindeki bir anahtarın var olup olmadığını get ve has_key methodları ile yaparız. Get methoduna iki parametre verilir; ilki anahtar adı ikincisi anahtarın bulunamaması halinde dönecek varsayılan değer. Anahtarın var olup olmadığını has_key ile kontrol ederiz. Geriye True / False değer döndürür.

#!/usr/bin/python
#-*- coding:utf-8 -*-

urunler = { "makarna": 2, "ekmek": 1, "sigara": 8 }

if urunler.has_key("yumurta"):
 print("Yumurta fiyatı: {} TL".format(urunler["yumurta"]))
else:
 print("Yumurta kalmadı.")


print("makarna: {}".format(urunler.get("makarna", "kalmadı")))
print("kahve: {}".format(urunler.get("kahve", "kalmadı")))

Şimdilik bu kadar. İsterseniz şuradaki ve şuradaki sayfalara göz atabilirsiniz.

Devam et: Demetler