Python Programlama Dili

Bölüm 2

Genel Yöntemler

Top Navigasyon

Ders 22

3.3.3 - Sözlük Tipi Verilere Uygulanabilen Metotlar

Sözlükler, öntanımlı len() metodunu destekler. Örnek:

Bir başka örnek:

Sözlük tipi metotlara uygulanan item () metodu, sözlüğün tüm elemanlarını bir topluluk içinde toplar ve bu topluluğu görüntüler. Örnekler:

Sözlüklere uygulanan items() metodu, anahtar değeri tekli olsun, çoklu olsun, sözlükteki tüm elemanları bir topluluk içinde bir liste olarak geri döndürüyor. Bu topluluğun tek elemanı, sözlüğün tüm anahtar: değer verilerini eleman olarak içeren bir listedir. Bu listenin elemanlarına indisleri ile doğrudan erişim olanağı yoktur. Örnek:

Sözlüklere uygulanan items() metodunun geri döndürdüğü koleksiyonun elemanlarına indisleri ile erişim sağlanamasının nedeni, bu koleksiyonun,"görüntü (view)" olarak adlandırılan bir tipte olmasıdır. Görüntü tipleri sadece sonucun görüntülenmesi için oluşturulurlar. Bu tipi koleksiyonlar küme (set) tipindedir ve kümelere uyulanan metotlar ugulanarak elemanlarına erişilebilirler. Bu yöntemler belirli değerlerin belirli bir sözlükte olup olmadığı sorgulanabilir. Bu metotları, kümeleri incelediğimizde, görüntü kümelerine de uygulayarak sonuçları alabileceğiz.

Buna rağmen,  items() metodunun geri döndürdüğü koleksiyon, for in döngüleri ile iterasyon yapılmasına uygundur ve bu yöntemle sözlük elemanlarına erişilebilir. Örnekler:

Sözlük anahtarlarının görüntülenmesi için keys() metodu uygulanabilir. Örnek:

Sonuç, sözlüğün tüm anahtarlarının görüntüsünü içeren bir görüntü kümesidir. Bu kümenin erişim metotlarını, kümeler ile birlikte inceleyeceğiz. Buna rağmen bu koleksiyon for in döngüleri ile taranmaya uygundur. Örnek:

Öntanımlı del metodu, bellekteki bir veriyi bellekten kaldırır. Örnekler:

Öntanımlı fromkeys() metodu, hash edilebilen bir koleksiyondan yani float, frozenset, int, str, ve hash edilebilen toplulukların elemanlarını anahtar olarak kullanarak, sözlükler oluşturan, son derece yararlı bir metottur. Kullanılışı,

sözlük.fromkeys(s ,v)
    

şeklindedir. Burada,

Örnek:

Bundan sonra, elemanlara değer vermek için sözlük['Ocak'] = 19 şeklinde bir program adımı yeterli olacaktır.

Öntanımlı get(k) metodu, bir sözlükte bulunan k anakatarına karşı gelen değeri döndürür. Eğer, anahtar sözlükte bulunamazsa, None değeri görüntülenir. Örnek,

Benzer metot, sözlük.get(k, v) metodu, yine bir sözlükte, k anahtarına karşı gelen değeri döndürür. Fakat burada, eğer belirtilen anahtar sözlükle bulunamazsa, kullanıcının tanımladığı, bir mesaj görüntülenir. Örnek:

Öntanımlı clear() metodu, bir sözlüğün tüm elemanlarını siler. Örnek,

Öntaımlı copy() metodu, sözlüğün sığ kopyasını başka bir değişkene aktarır. Kullanım yöntemi, aşağıdaki programda görülebilir.

Sonuçlar incelendiğinde, içiçe olmayan sözlükler için, sığ kopyalamanın yeterli olduğu ve kopyalamanın değer kopyalması olarak yürüdüğü görülebilir. Kopyalama sonunda, orijinal ve kopya, birbirinden bağımsız bellek bloklarını işaret etmektedirler. Bu yüzden her iki değişken de birbirinden bağımsızdır ve birinin güncellenmesi diğerini etkilememektedir. İçiçe sözlüklerde, yani anahtar veya değeri, güncellenebilir bir koleksiyon tipi olan sözlüklerde, derin kopyalama gereklidir. Fakat bu çalışmada içiçe koleksiyon tiplerini incelemeyeceğiz.

Öntanımlı keys() fonksiyonu, bir sözlüğün anahtarlarını, values() fonksiyonu ise değerlerini döndürür. Örnek:

Bu iki metodun da çok yararlı olduklarını belirtmek kolay değil. Sözlükler, sadece anahtar veya değer değil, anahtar : değer çiftleri için bir anlam taşırlar. Örnekte, anahtar görüntüleme sırası ile değer görüntüleme sırasının aynı olduğunu belirtiyor ve bu da önemli bir bilgidir.

Öntanımlı sözlük.pop(k) metodu, sözlükteki k anahtarına karşı gelen değeri döndürür ve bu değeri anahtar k ile birlikte sözlükten siler. Eğer, incelenenen sözlükte aranılan k anahtarı bulunmazsa, KeyError hatası oluşur.

Öntanımlı sözlük.pop(k, v) metodu, sözlükteki k anahtarına karşı gelen değeri döndürür ve bu değeri anahtar k ile birlikte sözlükten siler. Eğer, incelenenen sözlükte aranılan k anahtarı bulunmazsa, v ile belirtilen değeri döndürür. Örnek:

Öntanımlı popitem() metodu, sözlükten geligüzel bir elamanı kaldırır ve bu elemanı geri döndürür.. Eğer sözlük boş bir sözlük ise, KeyError istisnası fırlatılır. Örnek:

Bir başka metot olan setdefault(k, v) metodu, aynen get () metodu gibidir. Bu metodun farkı, eğer k anahtarı ile belirtilmiş olan değer sözlükte bulunamıyorsa, k anahtarı ile ve eğer v değeri belirtilmiş ise v değeri ile yoksa None değeri ile yeni bir elemanın sözlüğe yerleştirilmesidir. Bu metot, geriye varsa v değerini, yoksa None değerini döndürür. Örnek:

Öntanımlı update() metodu, sözlük.update(a) şeklinde kullanılır. Burada a argümanı, bir sözlük olabilir, bir iterasyon yapılabilecek anahtar, değer sekansı olabilir veya sadece keyword argümanı olabilir.Bu konuda, copy() metodunda bir örnek bulunmaktadır.

3.3.4 - Varsayılan Sözlükler

Varsayılan sözlükler (default dictionaries) , collections modülünde bulunan nesnelerdir. Bu tip sözlükler, eğer sözlüklte buluınmayan bir anahtarın değeri çağrıldığında hata vermezler ve bu anahtar ile önceden belirtilen bir değeri çiftleştirerek sözlüğe eleman olarak yerleştirirler. Kullanımı,

sözlük  =  collections.defaultdict(a)

şeklindedir. Burada a, çağrılabilen bir nesne olmalıdır. Bu int olabilir. Çünkü int çağrıldığında, int() fonksiyonunu çağırır ve geriye 0 döndürür. En anlamlısı kendi yazacağımız bir fonksiyonun geriye döndüreceği değerin kullanılmasıdır. Bir örnek aşağıda verilmiştir.

3.3.5 - Sıralı Sözlükler

Sözlükler, varsayılan olarak sıralı değillerdir. Sırasız olma özelliği, doğal olarak varsayılan özellik kabul edilmiştir. Sözlükler statil değil , dinamik nesnelerdir ve sık değişebilir güncelleştirilebilirler. Sıralanmış bir sözlük, güncelleştirlince, suarsı bozulabilir. Güncelleştirmeden sonra sırası bozulan bir sözlüğün yeniden sıralanması gerekir ve bu sürekli sıralama işlemleri, bigisayarrın sistem kaynaklarını zorlar. Bu nedenle, çok gerekli olmadıkça sözlüklerin sıralanmalarının yapılmaması akıllıca bir seçim olabilir.

Bazı durumlarda ise, sözlükler tamamen statik durumdadır. Örnek olarak, belirli bir deney süreci içinde okumalar, bir sözlükte toplanmış olsun, deney bitince, artık yeni okuma şansı kalmayacağından, sözlüğe yeni eleman ekleme şansı da kalmayacaktır. Bu tip statik sözlüklerin sıralanması, verilerin izlenme kolaylığının sağlanması açısından yararlı olacaktır.

Python programlama dilinin collections modülünde tanımlı OrderedDict() metodu, eleman sırası, veri giriş sırası olan sözlükler oluşturulmasına olanak sağlar. Örnek:

Sonuçtan da görüldüğü gibi, yaratılan sözlük, koleksiyon listgen ile aynı sıralamaya sahitir. Bu sıralamayı değiştirmek için, bir elemanı iptal edip,

sözlük güncellenir ve eleman listenin sonuna kaydırılmış olur.

Bu sözlüğün anahtarlarının sıralanmış listesi,

şeklinde elde edilebilir. Bunun x, y değerlerindeki deney noktalarının gözden geçirilmesinde, çok yararlı olabileceği açıktır. Nihayet tam sıralanmış bir sözlük,

şeklinde elde edilir. Bu sözlükten her eleman çıkarılmasında veya her eleman eklenmesinde, sıralama bozulabileceğinden, yeniden sıralanma yapılması gerekli olacaktır.