-
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 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'
- 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
- Diyelim ki Ege'nin notu yanlış okunmuş, notunu 5 puan arttıracağız.
notlar{'Deniz': 80, 'Ege': 72, 'Gizem': 95}
notlar["Ege"] = notlar["Ege"] + 5notlar["Ege"]77
notlar{'Deniz': 80, 'Ege': 77, 'Gizem': 95}
- 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
- Dictionary'lere eleman eklemek gerçekten kolay. Tamam yazmayı bırakıp direkt göstereyim:
notlar{'Deniz': 80, 'Ege': 77, 'Gizem': 95}
notlar["Mert"] = 58notlar{'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.
notlar{'Deniz': 80, 'Ege': 77, 'Gizem': 95, 'Mert': 58}
- Eleman silmeyi
delkeyword'ü ile yapabiliriz.
del notlar["Mert"]notlar{'Deniz': 80, 'Ege': 77, 'Gizem': 95}
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'
d = {}d{}
d[1] = "a"d{1: 'a'}
- 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 notlarFalse
"Deniz" in notlarTrue