= {"isim" : "Ali", "yaş" : 45}
D D
{'isim': 'Ali', 'yaş': 45}
Kaan Öztürk
February 3, 2018
Python’daki veri tiplerini daha önce kısaca ele almıştık; bir önceki bölümde de liste tipine ait metodların kullanımını örneklerle incelemiştik. Bu yazıda sözlük tipine ait olan metodları örneklerle açıklıyoruz. Bundan sonraki bölümlerde dize ve küme tiplerine ait metodları inceleyeceğiz.
Dizinin bütün yazılarına erişmek için Python Programlamaya Giriş kategorimize bakabilirsiniz. Bu dizideki yazılar ayrıca Jupyter defterleri halinde GitHub depomuzda da mevcut.
Sözlükler, listeler gibi, birden fazla elemanı bir araya toplayan yapılardır. Listelerden farkları sıralı nesne olmamalarıdır. Bir listenin indeksleri üzerinden doğal bir sırası varken, sözlüklerin elemanlarında doğal bir sıralama mevcut değildir.
Bir sözlük birleşmeli dizi (associative array) olarak anılan bir veri yapısıdır. Bu yapıdaki her eleman bir anahtar-değer (key-value) çiftinden oluşur. Belli bir değere ulaşmak için o değere ait tekil anahtarı kullanmak gerekir. Bu anahtar bir sayı, dize veya çokuz olabilir.
telefon["kaan"] == "216 123 4567"
sıcaklık[(24.345, 41.243)] == 21.2
Listelerde elemanlar sıfırdan başlayarak tamsayılarla indekslenirken, sözlük elemanlarını anahtarlarla indekslenir. Bu anlamda sözlükler listelerden daha geneldirler.
Diyelim bir kişinin ismini ve yaşını barındıran bir sözlük oluşturacaksınız. Bu sözlüğü Python’da oluşturmanın dört değişik yolu vardır.
dict
fonksiyonunu isimli parametrelerle kullanmak:dict
fonksiyonuna (anahtar, değer) çiftleri dizisi vermek:Bu sonuncu yöntem genellikle, anahtarlar ve değerler ayrı ayrı listelerde verilmişse, onları zip
fonksiyonuyla birleştirilerek kullanılır.
Bir nesnenin içindeki eleman sayısını veren len
fonksiyonu, bir nesneyi veya elemanını silen del
komutu, belirli bir elemanın mevcut olup olmadığını veren in
işlemi sözlüklerde de kullanılabilir.
in
komutu sadece anahtarlar üzerinde tarama yapar. Değerler arasında belli bir değer bulunup bulunmadığını bulmakta kullanılmaz.
Bir sözlük nesnesine ait metodları dir
fonksiyonuyla görebiliriz.
['__class__',
'__contains__',
'__delattr__',
'__delitem__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__getitem__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__iter__',
'__le__',
'__len__',
'__lt__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__setitem__',
'__sizeof__',
'__str__',
'__subclasshook__',
'clear',
'copy',
'fromkeys',
'get',
'items',
'keys',
'pop',
'popitem',
'setdefault',
'update',
'values']
Başında ve sonunda altçizgi olan metodlar nesne içi kullanım içindir.
clear
metodu ile bir sözlükteki bütün anahtar-değer çiftleri silinebilir.
Bazen bir sözlükteki orijinal bilgileri değiştirmeden, bir kopya üzerinde işlemler yapmanız gerekebilir. Bir sözlüğün kopyasını copy
metoduyla elde edebilirsiniz.
Bundan sonra D2
’de yapacağımız değişiklikler D
’yi etkilemez.
Sözlüklerin update
metodu ile varolan bir sözlüğe yeni bir sözlükten anahtar-değer çiftleri ekleyebilirsiniz. Aynı anahtara sahip iki değer varsa, eskisi yenisiyle değiştirilir. Bu metod nesne içi (in-place) değişiklik yapar.
Bazen bir sözlükteki elemanları teker teker işlemek için bir döngü kurmak isteyebilirsiniz. Ancak sözlükler sıralı nesne olmadıkları için for
döngüsü ile kullanılamazlar. Bir sözlüğün içeriğini iterasyona uygun bir biçime getirmek için dict.items
metodunu kullanmalıyız.
telefonlar = {"Ali": 3762, "Zeynep": 8249, "Mehmet": 2652}
for isim,tel in telefonlar.items():
print("Adı: {}, İç Hat: {}".format(isim,tel))
Adı: Ali, İç Hat: 3762
Adı: Zeynep, İç Hat: 8249
Adı: Mehmet, İç Hat: 2652
Dikkat: Yazdığımız döngüde elemanları sözlüğe verdiğimiz orijinal sırada geri aldık. Ama bunun her zaman böyle olacağının garantisi yok. Sözlüklerde herhangi bir varsayılan sıra olmaz. Yapacağınız işlem belli bir sıralama gerektiriyorsa, işlemden önce elemanlar listesinde açık komutla sıralama yapın.
telefonlar = {"Ali": 3762, "Zeynep": 8249, "Mehmet": 2652}
for isim,tel in sorted(telefonlar.items()):
print("Adı: {}, İç Hat: {}".format(isim,tel))
Adı: Ali, İç Hat: 3762
Adı: Mehmet, İç Hat: 2652
Adı: Zeynep, İç Hat: 8249
Sadece anahtarlardan oluşan bir liste elde etmek için dict.keys
metodunu kullanırız.
Sadece değerlerden oluşan bir liste için dict.values
metodu kullanılır.
Eğer iki çağrı arasında sözlükte bir değişiklik yapılmadıysa, keys
ve values
metodlarıyla elde ettiğimiz listelerin elemanları karşılıklı olarak sözlükteki mevcut anahtar-değer çiftlerine denk gelir. Böylece zip
ile bu listeleri birleştirerek orijinal sözlüğü elde edebiliriz.
Bir D
sözlüğünde saklanan bir değere erişmenin en basit yolu D[anahtar]
komutunu kullanmak. Fakat anahtar
referansı sözlükte tanımlı değilse bir hata mesajı çıkar, bu da programınızın akışınızı bozabilir.
Verilen anahtarın sözlükte bulunmaması durumunda varsayılan bir değer döndürülmesini istiyorsanız, get
metodunu kullanabilirsiniz. D.get(k, d)
ifadesi, k
anahtarı sözlükte varsa D[k]
değerini, yoksa varsayılan d
değerini geri verir.
Bir D
sözlüğüne yeni bir anahtar-değer çiftini dinamik olarak kolayca ekleyebiliriz.
Bunun başka bir yolu da setdefault
metodunu kullanmaktır. Bu metod, get
gibi çalışır, mevcut olmayan bir anahtar verildiğinde bir varsayılan değer döndürür. Ama get
’ten farklı olarak, verilen yeni anahtarı sözlüğe ekler.