- Sözlük nedir ve ne zaman seçilir?
- Sözlük oluşturma yolları
- Okuma: köşeli parantez, get ve in
- Ekleme, güncelleme ve silme
- Döngüyle gezme: keys, values, items
- Örnek senaryo: siparişleri müşteriye göre gruplama
- Sık yapılan hatalar
- Sözlük bilgisini Mindset programlarında nerede pekiştirirsiniz?
- Sık sorulan sorular
Python sözlük kullanımı: oluşturma, güncelleme ve döngüyle gezme
Sözlükte anahtarla değere ulaşmayı, eksik anahtarda hata almadan okumayı, kayıt eklemeyi ve silmeyi, tüm içeriği döngüyle gezmeyi kısa örneklerle öğrenirsiniz.
Bir bakışta
- Sözlük, değerlere sıra numarasıyla değil anahtarla ulaştığınız veri yapısıdır. Müşteri kodundan müşteri bilgisine, ürün adından stok durumuna gidecek her eşleştirme için doğal seçimdir.
- Var olmayan anahtarı köşeli parantezle okumak hata verir, get ise vermez. Anahtarın bulunmama ihtimali varsa get ile varsayılan değer vermek en güvenli okuma yoludur.
- Anahtar ve değeri birlikte gezmenin yolu items metodudur. Yalnız anahtarlar için keys, yalnız değerler için values yeterlidir.
- Gruplama ve sayma işleri sözlüğün en sık iş kullanımıdır. setdefault ya da collections modülündeki Counter bu işleri kısaltır.
- Döngü sürerken sözlüğün boyutunu değiştirmek hata üretir. Önce anahtarların bir listesini alıp onun üzerinde dönmek sorunu çözer.
Sözlük nedir ve ne zaman seçilir?
Python sözlüğü, anahtar ve değer çiftlerini saklayan veri yapısıdır. Listede bir öğeye sıra numarasıyla ulaşırsınız; sözlükte ise anlamlı bir anahtarla. Python'un kendi eğitim belgesi bunu şöyle anlatır: sözlükler bir sayı aralığıyla değil, anahtarlarla indekslenir ve anahtar olarak değiştirilemeyen herhangi bir tür kullanılabilir. Metinler ve sayılar her zaman anahtar olabilir.
Bir sorunun cevabı "şu şeye karşılık gelen değer nedir?" biçimindeyse sözlük doğru araçtır. Müşteri kodundan müşteri adına, ürün adından stok miktarına, çalışan sicilinden departmana kadar her eşleştirme bu kalıba uyar. Veriyi sıralı bir liste olarak tutup her seferinde baştan sona taramak yerine anahtarı doğrudan söylersiniz.
Listeyle karşılaştırmak seçimi kolaylaştırır. Sıra önemliyse ve öğeler birbirinden bağımsızsa liste, her öğenin bir etiketi varsa ve ona etiketiyle ulaşmak istiyorsanız sözlük kullanılır. Sözlükler ekleme sırasını korur; yani içeriği gezdiğinizde öğeler eklendikleri sırayla gelir.
Sözlük oluşturma yolları
En yaygın yol, süslü parantez içinde anahtar ve değeri iki nokta işaretiyle ayırarak yazmaktır: stok = {"elma": "kırmızı", "armut": "yeşil"}. Boş bir sözlük {} ile başlatılır ve kayıtlar sonradan eklenir.
Anahtarlar basit metinse dict işlevi ile renkler = dict(elma="kırmızı", armut="yeşil") yazılabilir; bu biçimde anahtarlar tırnaksız verilir ve geçerli bir değişken adı olmak zorundadır. Elinizde çiftlerden oluşan bir liste varsa dict(ciftler) onu doğrudan sözlüğe çevirir.
Ayrı listeleriniz varsa, biri anahtarları biri değerleri taşıyorsa, dict(zip(anahtarlar, degerler)) bunları eşleştirir. Veri tabloları ve dosyalardan okunan satırlarla çalışırken bu kalıp çok işe yarar.
Son yol, bir sözlük üreteci yazmaktır: {ad: ad.upper() for ad in adlar}. Mantığı liste üretecine benzer; ayrıntısı için ilgili rehbere bakabilirsiniz. Sözlük üreteci, mevcut bir koleksiyondan filtreleyerek ya da dönüştürerek yeni bir sözlük kurmak istediğinizde tercih edilir.
Okuma: köşeli parantez, get ve in
Bir değeri okumanın en doğrudan yolu stok["elma"] yazmaktır. Anahtar yoksa Python KeyError hatası verir ve program durur. Resmî eğitim belgesi bu durumu açıkça belirtir: var olmayan bir anahtarı köşeli parantezle okumak KeyError üretir; anahtarın bulunmama ihtimali varsa get metodu kullanılmalıdır.
stok.get("kiraz") anahtar yoksa hata vermez, None döndürür. Ek bir argüman verirseniz varsayılan değer o olur: stok.get("kiraz", "bilinmiyor"). Bu, kullanıcıdan ya da dış sistemden gelen verilerde en güvenli okuma biçimidir; çünkü eksik alan programı düşürmez.
Anahtarın var olup olmadığını yalnızca sormak istiyorsanız in işlecini kullanırsınız: "elma" in stok doğru ya da yanlış döner. Dikkat edilecek nokta, in işlecinin değerlere değil anahtarlara baktığıdır. Bir değerin sözlükte olup olmadığını öğrenmek için "kırmızı" in stok.values() yazılır.
Ekleme, güncelleme ve silme
Sözlüğe yeni kayıt eklemek ile var olanı güncellemek aynı söz diziminden geçer: stok["kiraz"] = "koyu kırmızı". Anahtar yoksa eklenir, varsa değeri değişir. Bu yüzden yanlışlıkla üzerine yazmamak için güncellemeden önce kontrol etmek bazen gerekir.
Birden çok kaydı tek hamlede işlemek için update kullanılır: stok.update(yeni_stok). Aynı anahtarlar yeni değerlerle ezilir, olmayanlar eklenir. Farklı kaynaklardan gelen veriyi birleştirirken hangisinin öncelikli olacağını belirleyen şey, update çağrısının sırasıdır.
Silmenin yolları şunlardır: • del stok["elma"] kaydı siler; anahtar yoksa KeyError verir • stok.pop("elma") kaydı siler ve değerini geri verir; varsayılan değer verilmezse yine KeyError çıkar • stok.clear() tüm içeriği boşaltır
setdefault ise ayrı bir iş görür: anahtar varsa değerini döndürür, yoksa verdiğiniz varsayılanı ekleyip onu döndürür. Gruplama yaparken bunun neden değerli olduğu aşağıdaki örnekte görülür.
Eksik anahtar ihtimaline göre okuma yöntemi seçilir
Okuma ve ekleme kararı
- Anahtarın var olduğundan eminimKöşeli parantezle okuYoksa KeyError programı durdurur; bu bazen istenen bir uyarıdır.
- Yoksa varsayılan bir değer yeterget ile okuSözlüğü değiştirmez, yalnız okur.
- Yoksa kaydı da oluşturmak istiyorumsetdefault kullanAnahtar varsa mevcut değeri, yoksa verilen varsayılanı döndürür ve ekler.
Döngüyle gezme: keys, values, items
Sözlük üzerinde doğrudan döngü kurarsanız anahtarlar gezilir: for ad in stok: print(ad). Anahtarları açıkça istiyorsanız stok.keys(), yalnız değerleri istiyorsanız stok.values() çağrılır. Her ikisi de sözlükle birlikte güncellenen görünüm nesneleri döndürür; yani sözlük değişirse görünüm de değişir.
Anahtar ve değeri birlikte gezmenin yolu items metodudur. Python belgesindeki örnek de budur: for k, v in stok.items(): print(k, v). Her turda bir anahtar ve onun değeri ayrı değişkenlere açılır. Raporlama, doğrulama ve dışa aktarma kodlarının büyük kısmı bu kalıpla yazılır.
Sıralı gezmek gerekiyorsa sorted(stok) anahtarları alfabetik sıralar, sorted(stok.items()) ise çiftleri anahtara göre dizer. Değere göre sıralamak için sorted(stok, key=stok.get) yazılır; anahtarlar, değerlerine göre dizilir.
Gezerken sözlüğe kayıt eklemek ya da silmek RuntimeError üretir; çünkü yapı üzerinde dönülürken değişmektedir. Çözüm, anahtarların bir kopyasını almaktır: for ad in list(stok): ....
Örnek senaryo: siparişleri müşteriye göre gruplama
Bir e-ticaret ekibinin elinde sipariş satırları olsun; her satırda müşteri kodu ve ürün adı var. Amaç, her müşterinin aldığı ürünleri tek bir yerde toplamaktır. Sözlük burada tam yerine oturur: anahtar müşteri kodu, değer ürünlerin listesi.
Kodun özü tek satırdır: gruplar.setdefault(musteri, []).append(urun). Müşteri ilk kez görülüyorsa boş liste açılır, sonra ürün o listeye eklenir; daha önce görülmüşse mevcut liste kullanılır. setdefault olmadan önce anahtarın var olup olmadığını sormak, yoksa listeyi açmak gerekirdi.
Sayma işi de benzerdir. Ürünlerin kaç kez satıldığını bulmak için collections modülündeki Counter kullanılır: satis_sayilari = Counter(urun_adlari). En çok satılanları görmek için satis_sayilari.most_common() çağrılır. Sonucu okunur kılmak için items ile gezip yazdırırsınız.
Bu kalıplar, veri analizinde gruplama ve toplama işlerinin Python karşılığıdır. Veri çerçeveleriyle çalışmaya geçtiğinizde aynı mantığı pandas kütüphanesinin gruplama işlevlerinde tanırsınız.
Sık yapılan hatalar
En sık hata KeyError'dır. Genellikle anahtarın yazımı farklıdır: büyük küçük harf, baştaki ya da sondaki boşluk, Türkçe karakter. Dış kaynaktan gelen anahtarları kullanmadan önce temizlemek ya da get ile okumak bu hatayı önler.
Başka bir hata, değiştirilebilir bir nesneyi anahtar yapmaya çalışmaktır. Liste ve sözlük anahtar olamaz; Python bunu "unhashable" hatasıyla bildirir. Bileşik anahtar gerekiyorsa liste yerine demet kullanılır.
Bir diğeri kopyalama yanılgısıdır. yedek = stok yazmak yeni bir sözlük üretmez; aynı sözlüğe yeni bir isim verir. Birini değiştirdiğinizde diğeri de değişir. Bağımsız bir kopya için stok.copy() kullanılır; ancak bu kopya sığdır, içindeki listeler hâlâ ortaktır.
Son olarak, sözlüğü sıralı bir yapı gibi kullanmak sorun çıkarabilir. Ekleme sırası korunur ama sıra numarasıyla erişim yoktur. Konum önemliyse liste, etiket önemliyse sözlük seçilir.
Sözlük bilgisini Mindset programlarında nerede pekiştirirsiniz?
Sözlük, Python eğitimlerindeki veri yapıları konusunun ana parçalarından biridir. Python ile Programlama Eğitimi temel veri tiplerinden döngülere ve veri yapılarına kadar bu temeli kurar. Veri bilimine yönelen ya da veri toplama ve temizleme işleriyle uğraşan ekipler için Data Science Bootcamp de Python'a girişten veri yapılarına ve veri edinimine uzanan bir yol sunar.
İlgili Mindset programı
Python ile Programlama Eğitimi
Sık sorulan sorular
Python'da sözlük ile liste arasındaki temel fark nedir?
Liste öğelere sıra numarasıyla ulaşır; sözlük anlamlı bir anahtarla. Sıra önemliyse ve öğelerin ayrı bir etiketi yoksa liste uygundur. Her değerin bir adı, kodu ya da kimliği varsa sözlük hem daha okunaklı hem de aramada daha hızlıdır. Birçok programda bunlar iç içe kullanılır: değerleri liste olan bir sözlük, gruplamanın klasik biçimidir.
Sözlüğe birden fazla kaydı aynı anda nasıl eklerim?
Update metodu bu iş içindir. Başka bir sözlüğü ya da anahtar değer çiftlerinden oluşan bir koleksiyonu argüman olarak verirsiniz. Aynı anahtar varsa değeri yenisiyle değişir, yoksa kayıt eklenir. İki kaynağı birleştirirken çakışan anahtarlarda hangi değerin kalacağını, update çağrısının sırası belirler.
Sözlükte anahtarın var olup olmadığını nasıl kontrol ederim?
In işlecini kullanırsınız: anahtar sözlükte varsa doğru, yoksa yanlış döner. Bu işleç yalnız anahtarlara bakar. Bir değerin sözlükte geçip geçmediğini öğrenmek istiyorsanız values metodunun sonucunda arama yapmanız gerekir. Hem kontrol hem okuma gerekiyorsa tek adımda get kullanmak daha kısadır.
Sözlükte döngü kurarken kayıt silebilir miyim?
Doğrudan silemezsiniz; Python sözlüğün boyutu döngü sırasında değiştiği için hata verir. Önce silinecek anahtarları bir listeye toplayıp döngüden sonra silmek ya da anahtarların kopyası üzerinde dönmek yöntemdir. Çoğu zaman en sade çözüm, istediğiniz kayıtları taşıyan yeni bir sözlük üretmektir.
Sözlük anahtarı olarak hangi veri türleri kullanılabilir?
Değiştirilemeyen türler: metin, sayı, demet gibi. Liste ve sözlük değişebildikleri için anahtar olamaz. Bileşik anahtara ihtiyaç varsa, örneğin müşteri ve ay birlikte tanımlayıcıysa, bunları bir demete koyup demeti anahtar yapabilirsiniz. Demetin içindeki öğeler de değiştirilemez olmalıdır.