Odak modu

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


Background Pattern
Birlikte öğrenelim

Sektörde en çok aranan yazılım becerilerini kazan

Yapay zeka desteği, birebir mentörlük saatleri, canlı dersler ve senin için özel hazırlanmış içeriklerle eksiklerini tamamla, düzenli geri bildirimler al ve öğrenme sürecini en verimli hale getir.

Yunus Emre Kabakcı

Patika+ mezunu

Patika+ Fullstack Web Development Bootcamp mezunumuz Yunus Emre,

3 ay içinde Katar’dan aldığı teklif ile, global bir şirket olan Pavo Group’da işe başladı!


“İçerik zenginliği, mentor desteği, ileriye dönük bir network sağlaması ve dünyada en çok tercih edilen frameworkler üzerinden bir eğitim veriyor olması Patika+’ı tercih etmemin temel sebepleri oldu!“

Test

Hackerrank challenge

Yorumlar

Yorum yapabilmek için derse kayıt olmalısın!