Modül dersleri (3/4)
Sözlükler
Sözlük (dict) bir anahtar → değer haritasıdır: bir anahtarı ilişkilendirirsiniz
(neredeyse her zaman bir dize) herhangi bir türde değere sahip. Bu temel
Gerçek dünya varlıklarını modellemek için veri yapısı.
Sözlük oluşturma
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# costruttore alternativo
utente = dict(nome="Ada", anni=36, attivo=True)Anahtarlar hash edilebilir (değişmez) olmalıdır: dizeler, sayılar, hash edilebilir demetler unsurlar. Öte yandan değerler herhangi bir şey olabilir, hatta başka hükümler bile olabilir.
Erişim, değişiklik, silme
utente["nome"] # 'Ada'
utente["email"] # KeyError!
utente.get("email") # None (default sicuro)
utente.get("email", "—") # '—' (default custom)
utente["citta"] = "Roma" # aggiunge / aggiorna
del utente["attivo"] # rimuoveBir dikte üzerinde yineleme
for chiave in utente: # itera sulle CHIAVI (default)
print(chiave, utente[chiave])
for chiave in utente.keys(): # esplicito
...
for valore in utente.values():
print(valore)
for chiave, valore in utente.items(): # idiom più comune
print(f"{chiave} = {valore}")Yineleme sırası ekleme sırasıdır (Python 3.7'den beri garanti edilmektedir) itibaren).
Anahtar mevcut mu?
"nome" in utente # True
"email" in utente # False (NON usa il valore, usa la chiave!)setdefault: ilk erişimde başlat
Sık görülen bir kalıp: "anahtar yoksa, varsayılanı herhangi bir yere koyun; durumda geçerli değeri döndürür".
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}Ayrıca saymanın özel durumu için collections.Counter vardır (biz
stdlib modülünde göreceksiniz).
Sözlükler üzerinde yineleme
Bir sözlük üzerinde birçok yolla yineleme yapabilirsiniz:
for k in d: yalnızca tuşlar üzerinde döngü yapar (varsayılan davranış).for k, v in d.items(): anahtar/değer çiftleri üzerinde aynı anda döngü yapar (son derece kullanışlıdır).for v in d.values(): yalnızca değerler üzerinden döngü yapar.
Deneyin
`user = {'nome': 'Ada', 'anni': 36}` verildiğinde, 'email' = 'ada@ex.com' anahtarını ekleyin ve ardından varsayılan 'sconosciuto' ile .get kullanarak 'telefono' anahtarının değerini `email_or_default`a atayın. 'email_or_default'u değerlendirin.
İpucu göster
.get('telefono', 'sconosciuto') KeyError'ı yükseltmez.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
`Fiyatlar = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}` verildiğinde, tüm değerlerin toplamını hesaplayın ve bunu `toplam'a atayın. 'Toplam'ı değerlendirin.
İpucu göster
sum(prices.values()) tüm değerleri toplar.
3 denemeden sonra çözüm mevcut
Ek zorluk
Given the dictionary `user = {'name': 'Alice'}`, use the `.get()` method to retrieve the value of the key `'role'`. If the key does not exist, make it return the default value `'guest'`. Store the result in `user_role` and evaluate it.
İpucu göster
Get yöntemi, geri dönüş olarak ikinci bir parametreyi kabul eder: user.get('role', 'guest').
3 denemeden sonra çözüm mevcut