Перейти к основному содержимому
Модуль 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

Перебор диктата

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: инициализировать при первом доступе

Частая схема: «если ключа не существует, поставьте значение по умолчанию; в любом случае вернуть текущее значение».

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 попыток