Перейти до основного вмісту
Модуль 3 · Урок 3 із 411/36 у курсі~12 min
Модульні уроки (3/4)

словники

Словник (dict) — це карта ключ → значення: ви пов’язуєте ключ (майже завжди рядок) зі значенням будь-якого типу. Це фундаментальний структура даних для моделювання об'єктів реального світу.

Створення словника

Python
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# costruttore alternativo
utente = dict(nome="Ada", anni=36, attivo=True)

Ключі мають бути хешованими (незмінними): рядки, числа, кортежі хешованих елементів. Цінності, з іншого боку, можуть бути будь-чими — навіть іншими словами.

Доступ, зміна, видалення

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

Ітерація через dict

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}")

Порядок ітерації — це порядок вставлення (гарантовано з Python 3.7 і далі).

Чи існує ключ?

Python
"nome" in utente     # True
"email" in utente    # False     (NON usa il valore, usa la chiave!)

setdefault: ініціалізувати під час першого доступу

Частий шаблон: "якщо ключ не існує, вставте значення за замовчуванням у; у будь-якому case повертає поточне значення».

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]}

Існує також collections.Counter для конкретного випадку підрахунку (ми побачить це в модулі stdlib).

Перегляд словників

Ви можете переглядати словник кількома способами:

  • for k in d: перебирає лише ключі (поведінка за замовчуванням).
  • for k, v in d.items(): одночасно перебирає пари ключ-значення (дуже корисно).
  • for v in d.values(): перебирає лише значення.

Спробуйте

вправи#python.m3.l3.e1
Спроби: 0Завантаження…

Враховуючи `user = {'nome': 'Ada', 'anni': 36}`, додайте ключ 'email' = 'ada@ex.com', а потім призначте `email_or_default` значення ключа 'telefono' за допомогою .get із замовчуванням 'sconosciuto'. Оцініть `email_or_default`.

Завантаження редактора…
Показати підказку

.get('telefono', 'sconosciuto') не викликає KeyError.

Рішення доступне після 3 спроб

Повторна вправа

вправи#python.m3.l3.e2
Спроби: 0Завантаження…

Якщо `prices = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`, обчисліть суму всіх значень і призначте її до `total`. Оцініть `загальний`.

Завантаження редактора…
Показати підказку

sum(prices.values()) додає всі значення.

Рішення доступне після 3 спроб

Додатковий виклик

вправи#python.m3.l3.e3
Спроби: 0Завантаження…

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.

Завантаження редактора…
Показати підказку

Метод get приймає другий параметр як запасний: user.get('role', 'guest').

Рішення доступне після 3 спроб