Ana içeriğe geç
Modül 3 · Ders 3 ders 4Kurstaki 11/36~12 min
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

Python
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

Python
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"]      # rimuove

Bir dikte üzerinde yineleme

Python
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?

Python
"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".

Python
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

Egzersiz#python.m3.l3.e1
Denemeler: 0Yükleniyor…

`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.

Düzenleyici yükleniyor…
İpucu göster

.get('telefono', 'sconosciuto') KeyError'ı yükseltmez.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#python.m3.l3.e2
Denemeler: 0Yükleniyor…

`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.

Düzenleyici yükleniyor…
İpucu göster

sum(prices.values()) tüm değerleri toplar.

3 denemeden sonra çözüm mevcut

Ek zorluk

Egzersiz#python.m3.l3.e3
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İ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