[Bölüm 15] Python Dilinde Sözlük (Dict) Veri Yapıları

Merhaba arkadaşlar bu blog yazımda sizlere Python programlama dilindeki sözlük veri yapılarından bahsedeceğim. Bundan bir önceki bölümde kümelerden yani setlerden bahsetmiştim. Sözlüklerde ise durum pek de farklı değil. Kümelerin biraz gelişmiş versiyonu dersek yerinde olur çünkü temel özellikleri sözlüklerle aynı işlevdedir. Aşağıda sözlüklerin temel özelliklerini açıklamaya çalıştım ve hemen akabinde de bu özellikleri örnek kodlarla gösterdim.

Kümelerde olduğu gibi sözlükleri de süslü parantez kullanarak ifade ediyoruz ve en önemlisi sözlükler de kümeler gibi tekil eleman barındırmak zorundadır ve elemanları ifade ederken indisler kullanılmaz. Dolayısıyla elemanları sırasızdır.

Sözlüklerin diğer özellikleri ise kümelerden farklı olarak karşımıza çıkıyor. Bunların başında değişebilir (mutable) eleman barındırabilme geliyor. Aynı zamanda burada ilk defa karşılaşacağımız anahtar:değer çiftlerini de içlerinde barındırırlar. Burada bahsettiğim anahtarlar tekil olmak zorundadır çünkü elemanları çağırırken indisler yerine anahtarlar kullanılır.

Sözlüklerde ekleme ve silme işlemleri kolaylıkla yapılır ve buna ek olarak anahtar:değer çiftlerinden ötürü bir de okuma işlemi yapılabilir. Dolayısıyla da sözlük elemanlarını doğrudan değiştirebiliriz.

Sözlüklerde her bir eleman diğer veri tiplerinde de olduğu gibi virgül ile birbirinden ayrılır. Bu elemanlar üzerinde yukarıda bahsettiğim gibi ekleme, silme ve okuma işlemleri yapılır. Buradaki püf nokta bu saydığım 3 işlem sözlüklerdeki anahtar:değer çiftlerine birlikte uygulanarak yapılır.

Hemen aşağıda yazmış olduğum örnek kodlarla yukarıda bahsettiğim sözlük özelliklerini açıkladım.

yillar = {'mühendislik':4,'diş':5,'tıp':6}
print(type(yillar)) #yillar değişkenimizin hangi veri tipi olduğunu ekrana yazdırdım
print(len(yillar)) #yillar sözlüğümüzün eleman sayısını ekrsana yazdırdım

print('-'*30,'\n')

#hemen aşağıda anahtarlarımın hangi değerlere karşılık geldiğini ekrana yazdırdım
print(yillar['mühendislik'])
print(yillar['diş'])
print(yillar['tıp'])

print('-'*30,'\n')

del yillar['diş'] #sözlüğümüzden diş anahtarımızı değeriyle beraber sildim
print(yillar) #yeni sözlüğümü ekrana yazdırdım

print('-'*30,'\n')

print(yillar.keys()) #sözlüğümün anahtarlarını ekrana yazdırdım

print('-'*30,'\n')

print(sorted(list(yıllar))) #sözlüğümdeki anahtarları listeye alarak sıraladım

print('-'*30,'\n')

Çıktı:

<class 'dict'>
3
------------------------------ 

4
5
6
------------------------------ 

{'mühendislik': 4, 'tıp': 6}
------------------------------ 

dict_keys(['mühendislik', 'tıp'])
------------------------------ 

['mühendislik', 'tıp']
------------------------------

Şimdi ise aşağıda örnekte dict komutu ile sözlük oluşturalım.

yillar = dict([('mühendislik',4),('diş',5),('tıp',6)]) #yıllar isimli bir sözlük tanımladım
#burada kullandığım liste elemanları demetlerden oluşan bir listedir
#bu demetlerin elemanları anahtar:değer çiftidir

print(yillar) #sözcüğümü ekrana yazdırdım

Çıktı:

{'mühendislik': 4, 'diş': 5, 'tıp': 6}
ABC= dict(A=10,B=20,C=30) #burada ise farklı ve kolay bir yolla sözlük tanımladım
print(ABC)
print('-'*30)
print(list(ABC)) #sözcüğümü listeye dönüştürdüm

Çıktı:

{'A': 10, 'B': 20, 'C': 30}
------------------------------
['A', 'B', 'C']

Sözlüklerde Kodları Kısaltarak Tek Satırda Yazmak

Şimdi aşağıda daha önce listelerde yaptığım gibi bazı kodları tek satırda yazacağım. Bu yöntem sözlüklerle çalışırken bizim işimizi oldukça kolaylaştıracaktır.

kup = {x:x**3 for x in range(15)} #15 e kadar olan sayılardan ve küplerden oluşan sözlük oluşturdum
print(kup)
print('-'*100)
print(kup.keys())
print('-'*100)
print(kup.values())
print('-'*100)
print(kup.items())
print('-'*100)

for i in kup.items():
    print('{} sayısı {} sayısının küpüdür.'.format(i[1],i[0]))

Çıktı:

{0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000, 11: 1331, 12: 1728, 13: 2197, 14: 2744}
----------------------------------------------------------------------------------------------------
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
----------------------------------------------------------------------------------------------------
dict_values([0, 1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744])
----------------------------------------------------------------------------------------------------
dict_items([(0, 0), (1, 1), (2, 8), (3, 27), (4, 64), (5, 125), (6, 216), (7, 343), (8, 512), (9, 729), (10, 1000), (11, 1331), (12, 1728), (13, 2197), (14, 2744)])
----------------------------------------------------------------------------------------------------
0 sayısı 0 sayısının küpüdür.
1 sayısı 1 sayısının küpüdür.
8 sayısı 2 sayısının küpüdür.
27 sayısı 3 sayısının küpüdür.
64 sayısı 4 sayısının küpüdür.
125 sayısı 5 sayısının küpüdür.
216 sayısı 6 sayısının küpüdür.
343 sayısı 7 sayısının küpüdür.
512 sayısı 8 sayısının küpüdür.
729 sayısı 9 sayısının küpüdür.
1000 sayısı 10 sayısının küpüdür.
1331 sayısı 11 sayısının küpüdür.
1728 sayısı 12 sayısının küpüdür.
2197 sayısı 13 sayısının küpüdür.
2744 sayısı 14 sayısının küpüdür.

Python Sözlük Metodları

Daha önceki veri tiplerinde olduğu gibi sözlük veri tiplerinde de kullanım esnasında işimizi kolaylaştıracak bazı metodlar vardır. Bu metodları kullanarak yazmış olduğumuz kodları daha verimli hale getirebiliriz.

Hemen aşağıda sözlük veri tiplerinde en sık kullanılan bazı metodları tablo halinde verdim. İnceleyebilirsiniz.

Metod İşlevi
clear() Sözlüğü siler.
copy() Sözlüğü kopyalar.
items() Sözlük içerisindeki çiftleri liste olarak çıktı verir.
keys() Sözlükteki anahtarları çıktı olarak verir.
pop(x) Sözlükten x anahtarını siler.
popitem() Sözlükten rastegele bir anahtar siler.
update(x) Sözlüğü x verileri ile günceller.
values() Sözlüğün içindeki anahtarların değerleri çıktı verir.
len(x) Sözlüğün eleman sayısını verir. (anahtar sayısına denktir)
del() Sözlükteki istenilen anahtarları siler.

Hemen aşağıda yukarıda vermiş olduğum tablodaki metodları örnekledim. Metodların çalışma mantığını inceleyebilirsiniz.

clear() Metodu

Tanımlamış olduğumuz sözlüklerdeki tüm verileri silmemizi sağlar.

etk = {"elektrik":1,"tesisleri":2,"kulübü":3}
print(etk)
etk.clear()
print(etk)

Çıktı:

{'elektrik': 1, 'tesisleri': 2, 'kulübü': 3}
{}

copy() Metodu

Oluşturulan sözcüğün (Dict) kopyasını oluşturmak için copy() metodu kullanılır.

etk = {"elektrik":1,"tesisleri":2,"kulübü":3}
print(etk)
ytu = etk.copy()
print(ytü)

Çıktı:

{'elektrik': 1, 'tesisleri': 2, 'kulübü': 3}
{'elektrik': 1, 'tesisleri': 2, 'kulübü': 3}

items() Metodu

Bu metodu kullanarak sözlük içerisindeki çiftlerin bir listesini çıktı olarak alabiliriz.

sozluk = {"a":1,"b":2,"c":3,"d":4,"e":5}
print(sozluk.items())

Çıktı:

dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)])

keys() Metodu

Sözlüklerin barındırdığı anahtarları çıktı olarak verir.

sozluk = {"a":1,"b":2,"c":3,"d":4,"e":5}
print(sozluk.keys())

Çıktı:

dict_keys(['a', 'b', 'c', 'd', 'e'])

pop(anahtar) Metodu

pop ifadesi ile oluşturulmuş metodlardan daha önceki veri tiplerinde bahsetmiştim. Burada da yine aynı işlevde kullanılan pop metodu parantez içerisine yazılan anahtar değerini sözlükten siler. Bu silme işlemini yaparken de çıktı olarak sildiği değeri döndürür.

elektrik = {"gerilim":1,"akım":2,"empedans":3,"direnç":4}
print("Silinen çiftimizin anahtar değeri {}'dir.".format(elektrik.pop("direnç")))
print("-"*40)
print(elektrik)

Çıktı:

Silinen çiftimizin anahtar değeri 4'dir.
----------------------------------------
{'gerilim': 1, 'akım': 2, 'empedans': 3}

popitem() Metodu

pop metodu ile sözlük üzerinden rastgele bir çift silinir.

alfabe_sirasi ={'a':1,'b':2,'c':3,'ç':4,'d':5,'e':6,'f':7}
alfabe_sirasi.popitem()
print(alfabe_sirasi)

Çıktı:

{'a': 1, 'b': 2, 'c': 3, 'ç': 4, 'd': 5, 'e': 6}

update() Metodu

update() metodu ile bir sözlüğü başka bir sözlük ile güncelleyebiliriz. Hemen aşağıda örnekle açıkladım.

stok = {'elma':5,'armut':10,'ayva':15}
print("Başlangıçtaki stok: ",stok)
print("-"*60)
yeni_stok = {'elma':10,'armut':15,'ayva':20}
stok.update(yeni_stok)
print("Son durumdaki stok",stok)

Çıktı:

Başlangıçtaki stok:  {'elma': 5, 'armut': 10, 'ayva': 15}
------------------------------------------------------------
Son durumdaki stok {'elma': 10, 'armut': 15, 'ayva': 20}

values() Metodu

İsminden de anlaşılacağı üzere values() metodunu kullanrak sözlüklerdeki anahtarların değerlerine ulaşabiliriz.

elektrik = {"gerilim":1,"akım":2,"empedans":3,"direnç":4}
print(elektrik.values())

Çıktı:

dict_values([1, 2, 3, 4])

len(x) Metodu

Sözlüğümüzdeki çiftlerin sayısını yani eleman sayısını verir.

elektrik = {"gerilim":1,"akım":2,"empedans":3,"direnç":4}
print(len(elektrik))
4

Sözlük İçinden Eleman Bulma

Bir sözlüğün içindeki bir anahtarın değerini çok rahat aşağıdaki yöntemle döndürebiliriz.

elektrik = {"gerilim":1,"akım":2,"empedans":3,"direnç":4}
print(elektrik["gerilim"])

Çıktı:

1

del Metodu

del metodunu kullanarak sözlüğümüzdeki istediğimiz anahtarı anahtarı silebiliriz.

elektrik = {"gerilim":1,"akım":2,"empedans":3,"direnç":4}
del elektrik["direnç"]
print(elektrik)
{'gerilim': 1, 'akım': 2, 'empedans': 3}

Anahtar Varlığının Kontrol Edilmesi

in ifadesini kullanarak anahtarların sözlük içerisindeki varlığını kontrol edebiliriz.

etk = {"elektrik":1,"tesisleri":2,"kulübü":3}
if "elektronik" in etk:
    print("True")
else:
    print("False")
False