Dictionary - Python 101 #9

Dictionary nedir?

Bir dictionary'i aslında bir liste gibi düşünebiliriz ama dictionary'ler listelerden biraz daha genel amaçlar için kullanılır. Detaylandıracak olursak; Dictionary'de

  • indeksler integer(sayı) olmak zorunda değildir, indeksler herhangi bir değişken tipine sahip olabilir.
  • indekslerden key(anahtar) olarak bahsedilir. key lerin tuttuğu değerlerden ise value(değer) olarak bahsedebiliriz.
  • Her key bir değer içerir ve bir dictionary'de aynı key den birden fazla olamaz.

Bir dictionary nasıl tanımlanır?

Bir dictionary tanımlamak oldukça basittir, aşağıdaki örnekle inceleyelim.

# Bir dictionary tanımlamanın iki yolu vardır; 1. si dict anahtar sözcüğünü kullanmaktır.
ilk_dict = dict()
# 2. si ise sadece süslü parantez açıp kapamaktır.
ikinci_dict = { }
# Her ikisini de print ettiğimizde sonucun aynı olduğunu göreceğiz.
print ilk_dict
print ikinci_dict
# Çıktı
{ }
{ }

Dictionaries'te veri ekleme nasıl yapılır?

Dictionaries'te, listelerde olduğu gibi veri eklemek için herhangi bir fonksiyon kullanmak zorunda değiliz(insert,append). Köşeli parantezleri kullanarak rahatça veri ekleyebiliriz. İşlemin nasıl yapıldığını aşağıdaki örneğimizde inceleyelim.

ilk_dict = dict()  # yeni bir dict oluşturdum
ilk_dict["bir"] = 1 # "bir" key'ine sahip olan indeksime 1 değerini atadım.
print ilk_dict # yazdırma işlemini yaptım.

# Çıktı
# {'bir': 1}

Dictionaries'te sıralamanın bir önemi yoktur. Eklediğiniz veriler, herhangi bir değere göre sıralanmaz.

Yukarıdaki örnekte oluşturduğumuz ilk_dict adlı dictionary'mize birkaç veri daha ekleyerek, ekrana yazdırma işlemini yapalım.

ilk_dict = dict()
ilk_dict["bir"] = 1
ilk_dict["iki"] = 2
ilk_dict["uc"] = 3
print ilk_dict

# Çıktı
# {'iki': 2, 'bir': 1, 'uc': 3}

Yukarıda da gördüğümüz gibi, sıralama işlemi herhangi bir düzene göre yapılmamaktadır.

len Kullanımı

Aynı listelerde olduğu gibi dictionaries'te de len fonksiyonunu kullanabiliriz. len fonksiyonu bize dictionaries'in içerdiği eleman sayısını indeksleri baz alarak vermektedir.

ilk_dict = dict()
ilk_dict["bir"] = 1
ilk_dict["iki"] = 2
ilk_dict["uc"] = 3
print len(ilk_dict)

# Çıktı
# 3

get Kullanımı

Python, dictionaries'deki herhangi bir değeri rahatlıkla bir değişkene atayabilmemiz için biz geliştiricilere get fonksiyonunu sunmaktadır. get fonksiyonu return bir fonksiyon olup, aldığı key değerinin karşılığını geri döndürmektedir. 2 parametre alan bir fonksiyon olan get fonksiyonu, ilk parametre olarak key değerini, ikinci parametre olarak ise başlangıç değeri ni alır. Eğer fonksiyona gönderdiğiniz bir key dictionary'de yer almıyorsa, get fonksiyonu geriye başlangıç değerini döndürmektedir. Örnekle inceleyelim.

# Her iki durum icin de baslangic degerini 0 olarak belirledik.
print ilk_dict.get("iki",0)
print ilk_dict.get("bes",0)

# Çıktı
# 2
# 0

Histogram kullanımı

Histogram, sayaç dizilerine verilen addır. Dictionary'ler üzerinden histogram oluşturmak istersek, basitçe bir string(metinsel) veri üzerinden inceleme yapabiliriz. Bir metinde hangi harften kaç tane olduğunun dictionary'sini oluşturan bir fonksiyon yazalım.

def histogram(str):
    hist_dict = {}
    for k in str:  # k = karakter
        if k in hist_dict:
            hist_dict[k] += 1
        else:
            hist_dict[k] = 1
    return hist_dict

print histogram("caylak")

# Çıktı
# {'a': 2, 'y': 1, 'c': 1, 'l': 1, 'k': 1}

Dictionary'den veri silme

  • Pop kullanımı

Listelerde de değindiğimiz gibi pop dictionary'de de silme işlemi için kullanılabilmektedir. Pop bize aynı zamanda bize sildiği verinin karşılığı olan değeri geri döndürür(del komutu ile arasındaki en temel fark budur.).

Gelin hep beraber yukarıda oluşturduğumuz hist_dict dictionary'sinden key'i(anahtarı) 'a' olan veriyi sildirip bir değişkene alalım.

deger = hist_dict.pop('a')
print deger
# 2
  • Del kullanımı

Listelerde olduğu gibi dictionary'lerde de del komutu silme işlemi yapmaktadır. Az önce değindiğimiz pop işlemine nazaran del void bir fonksiyondur, yani geriye değer döndürmez. Gelin hep beraber yukarıda kullandığımız örnek üzerinden inceleyelim.

del hist_dict['c']
print hist_dict

# {'a': 2, 'y': 1, 'l': 1, 'k': 1}

ÖRNEK 1

Bir tane dictionary ve bir tane numarayı parametre olarak alıp, dictionary verilerinde o numarayı arayan; eğer bulursa True, bulamazsa False döndüren bir fonksiyon yazalım.

def numara_bul(dict,numara):
    for i in dict.values():  # Sırasıyla dictionary değerlerini döndürüyoruz.
        if i==numara or i==str(numara):  # gelen değeri numaramız ile kıyaslıyoruz.
            return True
    return False

Nested Dictionary

Nested dictionary, bir dictionary'nin içerisinde veri olarak bir veya birden fazla dictionary barındırmasına denir. Örnek vermek istersek; bir üniversitedeki öğrencilerin verilerini dictionary'de tutmak istediğimizi varsayalım. Her öğrencinin adı, soyadı, 2 vize ve 1 sınav notu olmak üzere toplam 5 farklı veriyi barındıracağımız dictionary'i düşünelim. 

dictionary = { 'adi': 'Caylak', 'soyadi': 'Yazilimci', 'vize1': 70, 'vize2': 60, 'final': 100}

Öğrencileri yukarıda yer alan bilgiler üzerinden ayrıştırmamız pek mümkün görünmüyor. Bu nedenle öğrencilerin ID numaralarını genel dictionary'mizde key olarak düşünebiliriz. Şimdi ise yapmamız gereken tek şey bahsettiğimiz ID key lerine yukarıda oluşturmuş olduğumuz dictionary'i eklemek. 

ogrenciler = { '123123123' : {'adi': 'Caylak', 'soyadi': 'Yazilimci', 'vize1': 70, 'vize2': 60, 'final': 100}, '456456456': { 'adi': 'Ahmet', 'soyadi': 'Mehmet', 'vize1': 55, 'vize2': 50, 'final': 70}}

Yukarıda görmüş olduğunuz ogrenciler adlı dictionary'miz artık bir nested dictionary :).

Herhangi bir veriye nested dictionary'lerde nasıl erişilir?

ogrenciler nested dictionary'miz üzerinden id'sini bildiğimiz bir öğrencinin final notunu almak istediğimizi düşünelim.

# ogrenciler[id][deger] çağırma işlemimizin temel yapısı bu şekildedir. Ne kadar fazla dictionary'miz varsa köşeli parantez sayısı aynı oranda fazla olacaktır.

ogrenciler['123123123']['final']  # idsini bildiğimiz 123123123 nolu öğrencinin final notuna eriştik.

 

Bu yazımız burada sonlanıyor. Sorularınız veya görüşlerinizi yorum kısmına yazabilirsiniz. Bir başka yazımızda görüşmek üzere...

Add comment