Словник: тип dict

Словник (dict) у Python — це змінювана структура даних, яка зберігає пари "ключ — значення". Ключі є унікальними, а значення — будь-якими.

У цьому розділі:

Коли використовувати dict?

Словники варто використовувати, коли:

  • потрібно зберігати пари "ключ — значення",
  • потрібно забезпечити швидкий доступ до значення за ключем (d[key]),
  • ключі — унікальні і швидко порівнюються (наприклад, рядки або числа),
  • структура даних має природну відповідність між об'єктами (наприклад, іменем і віком, словом і його перекладом, тощо).

Уявіть словник як телефонну книгу: ви знаєте ім’я (ключ) і хочете знайти номер телефону (значення). Імена не повторюються, а значення можуть бути однаковими.

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

Словник задається фігурними дужками {} із парами ключ: значення, розділеними комами:

phonebook = {
    "Anna": "+380001234567",
    "Bohdan": "+380001112233"
}
print(phonebook["Anna"])  # +380001234567

Порожній словник:

d = {}
print(type(d))  # <class 'dict'>

Або через функцію dict():

d = dict(name="Olena", age=30)
print(d)  # {'name': 'Olena', 'age': 30}

Основні операції

Операція Опис Приклад Результат
d[key] Отримати значення за ключем. Якщо ключ key відсутній, то виникне помилка KeyError та виконання програми буде зупинено. d["age"] 30
d[key] = x Задати нове значення ключу або додати пару d["age"] = 35 {'age': 35}
del d[key] Видалити пару за ключем. Якщо ключ key відсутній, то виникне помилка KeyError та виконання програми буде зупинено. del d["age"] ключ і значення буде видалено
key in d Перевірити, чи є ключ у словнику "age" in d True або False
d.get(key) Безпечне отримання значення (або None) d.get("age") 30 або None
d.keys() Список ключів dict_keys([...])
d.values() Список значень dict_values([...])
d.items() Пари ключів і значень dict_items([...])
d = {"name": "Olena", "age": 30}
print("age" in d)          # True
print("city" in d)         # False
print(d.get("age"))        # 30
print(d.get("city"))       # None (ключ "city" відсутній)
print(list(d.keys()))      # ['name', 'age']
print(list(d.items()))     # [('name', 'Olena'), ('age', 30)]

Ітерування по словнику

d = {"a": 1, "b": 2}
for key in d:
    print(key, d[key])

або

d = {"a": 1, "b": 2}
for key, value in d.items():
    print(key, "->", value)

Вкладені словники

Словники можуть містити інші словники:

users = {
    "anna": {
        "age": 25, 
        "email": "anna@example.com"
    },
    "ivan": {
        "age": 30, 
        "email": 
            "ivan@example.com"
    },
}
print(users["anna"]["email"])  # anna@example.com
print(users["ivan"]["age"])  # 30

Практичне завдання: підрахунок слів

Порахуйте, скільки разів кожне слово зустрічається в тексті:

text = "hello world hello python world"
words = text.split()
counts = {}

for word in words:
    if word in counts:
        counts[word] += 1
    else:
        counts[word] = 1

print(counts)  # {'hello': 2, 'world': 2, 'python': 1}

Порівняння: list vs dict

Питання list dict
Чи має ключі? ❌ Ні ✅ Так
Доступ до значень За індексом За ключем
Підтримує порядок ✅ Так ✅ Так
Час доступу до елемента O(1) O(1)
Час пошуку значення O(n) O(1) для ключа, O(n) для значення

Коли не варто використовувати dict?

  • Якщо порядок дуже важливий — використовуйте list або OrderedDict.
  • Якщо потрібна множина унікальних значень без ключів — використовуйте set.
  • Якщо ключі змінювані (наприклад, список) — це помилка: ключі мають бути незмінними (immutable)!
d = {[1, 2]: "oops"}  # TypeError: unhashable type: 'list'