--- baslik: Sözlükler bolum: Veri yapıları ozet: Anahtar-değer çiftleri, ekleme, sorgulama, gezme ve sayım --- Listede bir öğeye sıra numarasıyla ulaşırsın. Ama "Ankara'nın plakası kaç?" sorusunda sıra numarası işe yaramaz. Sözlük, her değeri bir **anahtarla** eşleştirir: `plaka["Ankara"]` gibi. ## Sözlük oluşturmak Süslü parantez içine `anahtar: değer` çiftlerini virgülle ayırarak yazarsın. ```kbl plaka = {"İstanbul": 34, "Ankara": 6, "İzmir": 35} yazdir(plaka["Ankara"]) yazdir(plaka.uzunluk()) ``` ```cikti 6 3 ``` ## Ekleme ve güncelleme Olmayan bir anahtara değer atamak yeni çift ekler; var olan bir anahtara atamak değeri değiştirir. ```kbl stok = {"elma": 40, "armut": 25} stok["kiraz"] = 12 stok["elma"] = stok["elma"] - 5 yazdir(stok["elma"]) yazdir(stok["kiraz"]) ``` ```cikti 35 12 ``` ## Anahtar var mı? Sözlükte olmayan bir anahtarı okumak programı hatayla durdurur. Emin değilsen önce `var_mi()` ile sor. ```kbl plaka = {"İstanbul": 34, "Ankara": 6} dongu sehir icinde ["Ankara", "Konya"]: eger plaka.var_mi(sehir): yazdir(f"{sehir}: {plaka[sehir]}") degilse: yazdir(f"{sehir}: kayıtlı değil") ``` ```cikti Ankara: 6 Konya: kayıtlı değil ``` ## Silmek Sözlükte `sil()` **anahtara** göre siler (listede konuma göre silerdi). ```kbl stok = {"elma": 40, "armut": 25, "kiraz": 12} stok.sil("armut") yazdir(stok.uzunluk()) yazdir(stok.var_mi("armut")) ``` ```cikti 2 yanlış ``` ## Sözlükte gezmek `anahtarlar()` bütün anahtarları bir liste olarak verir. Her anahtar için değeri `sozluk[anahtar]` ile okursun. ```kbl fiyat = {"ekmek": 12.5, "süt": 34.9, "peynir": 149.0} anahtarlar = fiyat.anahtarlar() anahtarlar.sirala() dongu urun icinde anahtarlar: yazdir(f"{urun:<8}{fiyat[urun]:>8.2f} TL") ``` ```cikti ekmek 12.50 TL peynir 149.00 TL süt 34.90 TL ``` > **Dikkat:** `anahtarlar()` listesi ekleme sırasında gelmez. Belli bir sırada gezmek istiyorsan yukarıdaki gibi önce `sirala()` ile sırala. ## Sayım: en sık kullanılan sözlük işi Bir metinde hangi kelimenin kaç kez geçtiğini sayalım. Her kelime için: daha önce gördüysek sayısını artırırız, görmediysek 1 ile başlatırız. ```kbl cumle = "bir elma bir armut iki elma bir kiraz" sayim = {} dongu kelime icinde cumle.bol(" "): eger sayim.var_mi(kelime): sayim[kelime] = sayim[kelime] + 1 degilse: sayim[kelime] = 1 kelimeler = sayim.anahtarlar() kelimeler.sirala() dongu k icinde kelimeler: yazdir(f"{k}: {sayim[k]}") ``` ```cikti armut: 1 bir: 3 elma: 2 iki: 1 kiraz: 1 ``` ## Değerleri toplamak Bir sözlükteki sayıların toplamını anahtarlar üzerinden dönerek bulursun. ```kbl notlar = {"Ayşe": 88, "Mehmet": 64, "Elif": 92} toplam = 0 dongu ad icinde notlar.anahtarlar(): toplam += notlar[ad] yazdir(f"Ortalama: {toplam / notlar.uzunluk():.1f}") ``` ```cikti Ortalama: 81.3 ``` > **İpucu:** Bir sözlüğün bütün değerleri aynı türde olsun: hepsi sayı ya da hepsi metin. Öğrencinin adını, notunu ve şehrini birlikte tutmak istiyorsan *Yapılar* dersindeki `yapi` daha uygun bir araçtır. ## Alıştırma ```alistirma `telefon` sözlüğüne `"Can": "0532 111 22 33"` kaydını ekle. Sonra `"Can"` ve `"Deniz"` için ya numarayı ya da `Deniz: bulunamadı` yazdır. %%% telefon = {"Ayşe": "0555 123 45 67"} # buraya yaz %%% telefon = {"Ayşe": "0555 123 45 67"} telefon["Can"] = "0532 111 22 33" dongu ad icinde ["Can", "Deniz"]: eger telefon.var_mi(ad): yazdir(f"{ad}: {telefon[ad]}") degilse: yazdir(f"{ad}: bulunamadı") %%% Can: 0532 111 22 33 Deniz: bulunamadı ``` ```alistirma `metin_` içindeki her harfin kaç kez geçtiğini say (boşlukları atla). Harfleri sıralayıp `a 3` biçiminde, her biri ayrı satırda yazdır. %%% metin_ = "kar kara" sayim = {} # buraya yaz %%% metin_ = "kar kara" sayim = {} dongu h icinde metin_: eger h == " ": devam eger sayim.var_mi(h): sayim[h] = sayim[h] + 1 degilse: sayim[h] = 1 harfler = sayim.anahtarlar() harfler.sirala() dongu h icinde harfler: yazdir(f"{h} {sayim[h]}") %%% a 3 k 2 r 2 ```