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
dictionaryveri yapısını göreceğiz.
Dictionaryyapısının elemanlarına erişmek için belirlikeyler kullanacağız ve o da bizevalue'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ğimizkeyleri kullanacağız, integer indexing değil.
dictionary'lerin keyleriimmutableherhangi bir yapıda olabilir.value'larmutabledaimmutableda 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-valuemantığı ile çalışıyor. O yüzden biznotlar[0]gibi bir sorgu yaptığımızda,0diye 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
delkeyword'ü 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
Quiz
Answer the questions to check your understanding.
This lesson includes a short quiz.
Hackerrank challenge
Join the challenge to submit your solution.
Dictionary (sözlük)'leri öğrendin, şimdi challenge zamanı! Hackerrank profili aç ve [şu challenge’ı](https://www.hackerrank.com/challenges/defaultdict-tutorial/problem) yap:
Python Temel dersini tamamlaman için en sonunda Hackerrank’te Python alanında en az 4 yıldıza ulaşman gerekiyor. Bu challenge’lar seni yıldızlara adım adım götürecek! :)
Challenge’ı yapıp Hackerrank profilinin linkini aşağıdaki kutucuğa yaz:
Lesson discussion
Swap insights and ask questions about Python Temel
Be the first to start the discussion
Ask a question or share your thoughts about this lesson.