09 10
Sözlüklerin çalışma mantığına benzerliği sebebiyle bu isim verilmilştir, dist nesneleri bir anahtar(key) ile bir değer(value) çiftini tutarlar. Biz anahtar değeri verdiğimizde bize değer bilgisini döndüren veri yapılarıdır. Sözlükler tipik olarak hash tabloları biçiminde organize ediliyorlar. Bazen ise ikili ağaçlar olarak organize edildiğini de görebiliyoruz.
Boş bir dist nesnesi en pratik yolu ile { } parantezi kullanarak oluşturulur. İçi dolu bir dict nesnesi ise {10:’ali’, 20:’veli’, 30: ‘selami’ } şeklinde oluşturulur. Ne anahtarlar ne tuttuğu değerler aynı türden olmak zorunda değildir.
- Bir tuple’ı anahtar(key) yapabilirsiniz ama bir listeyi anahtar yapamazsınız!
- Değerlerin(value) hash edilebilir olması gerekmiyor.
- dict sınıfı dolaşılabilirdir fakat bir sözlüğü dolaştığınızda sadece anahtarları elde edersiniz, bu dolaşım sonucunda değerleri elde edemezsiniz. Yani bir listeye parametre olarak girdiğinizde sadece key’lerden oluşan bir liste elde etmiş olursunuz.
- Bu veri yapısı pratikte daha çok bir anahtar karşılığında bir veri yapısı tutacak şekilde kullanıldığı görülebilir. Yani bir anahtar ile bir demete ulaşıp o demetteki birden fazla bilgiye ulaşım sağlamak yaygın kullanım görebiliyoruz.
- Anahtar bilgisi ile verileye ulaşmak için köşeli parantez içine key(anahtar) bilgisi verilir, dict nesnesi de geri dönüş olarak bize value(değer/veri) bilgisini döndürür.
- Eğer anahtar yoksa hata döndürmektedir.
- Anahtarı verince değeri elde etmenin diğer bir yolu da get() methodunu kullanmaktadır. Köşeli parantez ile kullanımından farklı olmayan bir anahtar girdiğinizde get’de None değeri verir.
- Get iki parametre ile de kullanılabilmetedir, ikinci parametreye ne yazarsanız bulamadığında o değeri döndürür örn: a.get(10,’not found’)
- Dict sınıfının elemanları değiştirilebilirdir. Örn: a[’ali’] = 999 yazdığınızda ali key’i buluduğunda değerini 999 olarak değiştirecektir. Yani atamanın sağında kullanıyorsanız değerini elde eder, solunda kullanırsanız update edersiniz. Burada böyle bir anahtar yoksa yani olmayan bir şeye atama yaparsanız, bu anahtar çiftini sözlüğe yeni bir değer ekler.
- d={‘Guido van Rossum’:(‘Netherland’, 1956, ‘Haarlem’),’ Dennis Ritchie’:(‘United State’, 1941, ‘Bronixville’), ’James Gosling’:(‘Canada’, 1955, ‘Calgary’),’Bjarne Stroustrup’:(‘Denmark’, 1950, ‘Aarhus’)}
- birth_place, birth_date, region = d[‘Guido van Rossum’]
- print(birth_place,birth_date,region)
- CIKTI >: ’Netherland 1956 Haarlem’ olacaktır.
- Dict nesnesi dolaşılabilir nesneleri argülan olarak alabilir fakat doğru çalışabilmesi için dolaşılabilir nesnenin iki elemanlı ve elemanlarının yine dolaşılabilir nesnelerden oluşması gerekir.
- Örn a=[(‘Ali’:123),[‘Selami’:434],(‘Veli’:467),range(2),(‘xy’)]
- d=dict(a)
- Bir sözlüğe aynı anahtarla birden fazla değer eklerseniz son eklediğiniz değer geçerli olur.
- Bir sözlük nesnesine len uyguladığınızda anahtar değerlerin toplamını verir. Yani kaç elemanı var bilgisini verir.
- In ve not in operatörü sözlüklerde de kullanılır. Aynı sonucu verebilecek başka bir örnek d.get(”Guido van Rossum”) !=None da bir örnek olabilir.
- Dict veri yapısı kullanarak kolay şekilde bir Graft veri yapısı uygulanabilir.
NOT: Graft gibi veri yapılarından bahsettmişken bu konuda önemli ismlerden birinin daha adını paylaşayım :Edsger Dijkstra
Graf veri yapısına bir örnek olması açısından aşağıdaki veri yapısı örneğini paylaşıyorum, aşağıda A’dan D ye yol var mı yok mu diye kontrol ettiğimde TRUE cevabını alacağım.
- d={‘A’:{‘B’,’D’},’B’:{‘A’,’D’,’E’},’C’:{‘A’,’F’},’D’:{‘E’,’C’,’A’},’E’:{‘F’,’B’},’F’:{‘B’,’D’}}
- print(‘D’ in d[‘A’])
geeksforgeeks.org sayfasını inceleyerek bir çok graf algoritmasını hakkında detay inceleyebilirsiniz.
Dict sınıfının önemli methodları
- d.keys() methodu: dict bütün anahtarları dolaşılabilir bir nesne olarak vermekte. Bu anahtarları bize verileri sıralı şekilde vermez
- d.values() methodu çağrılarak bir dict’in tüm değerlerini elde edebilirsiniz. Bu methed değerleri sıralı şekilde vermek.
- d.items() methodu bize iterable bir anahtar değer çiftlerini vermekte, bunu bize bir demet olarak vermektedir.
- d.pop(’<anahtar>’) pop methoduna ahathar değeri verdiğinizde ilişkili veriyi siler, eğer bulamazsa hata alınmaktadır. Pop aynı zamanda sildiği anahtarın değeri geri döndürmektedir. Pop(’ali’, None) eğer ali değerini bulamazsa pop None değeri döndürmüş olabilir.
- d.update() nesnesi ile birden fazla değer ekleyebiliriz, bunun için dolaşılabilir fakat her dolaştığında iki elemanlı bir nesneye erişmesi gerekmektedir.
- d.setdefault() methodu d.setdefault(’ali’:100) olarak kullandığımızı var sayalım, örneğin ali değeri varsa bir şey yapmaz ama ali değeri yoksa ali anahtarını ekler ve 100 değerini ekler.