Focus mode

Python Temel

Dictionary

Dictionaries


  • Listeler bize bir arada tutulması anlamlı olacak verileri bir arada tutma gücü verir.


  • Mesela bir sınıftaki 3 öğrencinin sınavdan aldıkları notlar:


notlar = [80,72,95]


  • Bu listedeki 1. eleman ilk öğrenciyi, 2. eleman 2. öğrenciyi, 3. eleman...


  • Ben aynı zamanda bu öğrencilerin isimlerini de tutmak istiyorsam, isimleri için ayrı bir liste oluşturmam lazım. Kuracağım mantık için bu iki listenin eleman sayısı aynı olmalı. notlar[0] bana ilk öğrencinin notunu, isim[0] bana ilk öğrencinin notunu verecek.


isim = ["Deniz", "Ege", "Gizem"]


isim[0]


'Deniz'



notlar[0]


80



print(isim[0], "adlı öğrencinin notu", notlar[0])


Deniz adlı öğrencinin notu 80


  • Öğrenci numaralarını tutmak istiyorsam bunu için de ayrı bir liste oluşturmam lazım.


no = [703, 408, 690]



isim[0]


notlar[0]


no[0]


  • Her farklı bilgi için yeni bir liste oluşturmam gerekiyor.


  • Aynı elemanı ifade eden mantıklar listeler arası aynı indexte tutuluyor. (isim[0]'ın notu notlar[0])


  • Bu yapılabilir ama optimal olmayan bir yaklaşım. Karışıklık çıkması çok muhtemel.


  • İstediğim kısmı almanın daha kolay bir yolu olabilir mi? Sadece bir veri yapısı kullansam... Ayrı ayrı listeler kullanmasam...


  • Evet bunu yapabiliriz! Bunun için dictionary veri yapısını göreceğiz.


  • Dictionary yapısının elemanlarına erişmek için belirli keyler kullanacağız ve o da bize value'lar verecek.


  • dictionary'leri süslü parantez {} ile belirteceğiz.


  • Formumuz {key1:value1, key2:value2...} şeklinde olacak.


  • Elemanlarına ulaşmak için öbür non-scalar veri tiplerinde yaptığımız gibi [] kullanacağız. Ama - dictionary'lerin elemanlarına ulaşmak için belirlediğimiz keyleri kullanacağız, integer indexing değil.


  • dictionary'lerin keyleri immutable herhangi bir yapıda olabilir. value'lar mutable da immutable da olabilir. int, float, bool, string, list, tuple, set, even dictionaries itself!


notlar = {"Deniz": 80, "Ege":72, "Gizem": 95}


notlar["Ege"]


72



notlar["Gizem"]


95


ogrenciler = {"Deniz": {"not":80, "ogrenci_no":703}, "Ege":{"not":72, "ogrenci_no":408}, "Gizem": {"not":95, "ogrenci_no":690}}


ogrenciler["Ege"]


{'not': 72, 'ogrenci_no': 408}


ogrenciler["Ege"]["not"]


72



ogrenciler["Ege"]["ogrenci_no"]


408


Olmayan Bir Eleman Sorgulamak


  • Olmayan bir key ile eleman sorgusu yaparsak hata alırız.


notlar


{'Deniz': 80, 'Ege': 72, 'Gizem': 95}


notlar["Mert"]


---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-28-34561f410cad> in <module>
----> 1 notlar["Mert"]

KeyError: 'Mert'


Integer Indexing ile Eleman Sorgusu Yapmak


  • Dictionary'ler key-value mantığı ile çalışıyor. O yüzden biz notlar[0] gibi bir sorgu yaptığımızda, 0 diye bir key var mı diye bakıyor yoksa hata veriyor.


notlar[0]


---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-22-f9b97209b450> in <module>
----> 1 notlar[0]

KeyError: 0


Value Değerlerini Değiştirmek


  • Diyelim ki Ege'nin notu yanlış okunmuş, notunu 5 puan arttıracağız.


notlar


{'Deniz': 80, 'Ege': 72, 'Gizem': 95}


notlar["Ege"] = notlar["Ege"] + 5



notlar["Ege"]


77


notlar



{'Deniz': 80, 'Ege': 77, 'Gizem': 95}


len()


  • len() fonksiyonunu dictionary'lerde kullandığımız zaman bize kaç tane key varsa onun sayısını veriyor.


notlar


{'Deniz': 80, 'Ege': 77, 'Gizem': 95}


len(notlar)



3


Eleman Eklemek


  • Dictionary'lere eleman eklemek gerçekten kolay. Tamam yazmayı bırakıp direkt göstereyim:


notlar



{'Deniz': 80, 'Ege': 77, 'Gizem': 95}


notlar["Mert"] = 58



notlar



{'Deniz': 80, 'Ege': 77, 'Gizem': 95, 'Mert': 58}


  • Dictionary'ye sorgu yapıyor gibi yazıyoruz, ve value'si olmasını istediğimiz değeri de soluna yazıyoruz.


Eleman Silmek


notlar



{'Deniz': 80, 'Ege': 77, 'Gizem': 95, 'Mert': 58}


  • Eleman silmeyi del keyword'ü ile yapabiliriz.


del notlar["Mert"]


notlar



{'Deniz': 80, 'Ege': 77, 'Gizem': 95}


Sadece Immutable Tipindeki Veriler key olabilir

d = {1:2, 3:"b"}


d[1]


2



d[3]


'b'



d2 = {(1,2):"a", (4,5): [1,2,3]}


d2[(1,2)]


'a'



d2[(4,5)]


d3 = {[1,2]:4}


---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-48-304c7804ca22> in <module>
----> 1 d3 = {[1,2]:4}

TypeError: unhashable type: 'list'


Boş Bir Dictionary Yaratmak


d = {}


d



{}


d[1] = "a"



d


{1: 'a'}


Bir Değer Keyler Arasında Var mı Sorgusu Yapmak


  • Bir elemanın dictionary içinde olup olmadığını sorgulamak, list ve tuple'lerde sorgulamaktan daha hızlıdır.


notlar


{'Deniz': 80, 'Ege': 77, 'Gizem': 95}


"Mert" in notlar


False



"Deniz" in notlar


True


Test

Hackerrank challenge

Comments

You need to enroll in the course to be able to comment!