Словник: тип 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'