1.1 Словник та його властивості
Словник (dictionary) в Python — це упорядкована колекція пар ключ-значення, де кожен ключ унікальний. Словники є одним з найбільш гнучких і потужних типів даних в Python, що використовуються для зберігання та керування даними. Ми будемо дуже часто їх використовувати, практично так само часто, як списки. Скоро ви самі в цьому переконаєтесь :)
Основні властивості словників:
1. Унікальні ключі
Кожен ключ у словнику має бути унікальним. Якщо до словника додається пара ключ-значення з ключем, який вже існує, старе значення буде замінено новим. Наприклад, якщо ви хочете зберігати дані про студентів і використовуєте їх ідентифікатори як ключі:
students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students) # Виведе: {'123': 'Mike', '124': 'Alice'}
2. Упорядкованість
Важливо! До версії Python 3.7 словники були неупорядкованими колекціями, тобто порядок елементів не гарантувався. Починаючи з Python 3.7, словники зберігають порядок додавання елементів, однак цей аспект не є обов'язковою частиною специфікації мови до версії Python 3.8, де він став стандартним.
Це було 5 років тому. Ми вивчаємо Python на основі версії 3.12, тому можете сміливо розглядати словник як упорядкований набір елементів.
3. Змінність
Словники змінювані, що означає, що ви можете додавати, змінювати або видаляти елементи після створення словника. Наприклад, додамо адресу студента:
student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student) # Виведе: {'name': 'John', 'age': 20, 'address': '123 Main St'}
4. Ефективність
Словники оптимізовані для швидкого пошуку, додавання та видалення пар ключ-значення. В середньому, операції пошуку, додавання та видалення виконуються за постійний час, O(1). Що таке складність алгоритмів ви дізнаєтесь трохи пізніше, коли вивчатимемо теми «Алгоритми та структури даних».
5. Ключі та значення
Ключі у словнику можуть бути будь-якого незмінюваного типу даних, такого як строки, числа або кортежі. Значення можуть бути будь-якого типу даних, включаючи інші словники.
6. Методи доступу та зміни
Словники підтримують різні методи для доступу до елементів, додавання, зміни та видалення пар ключ-значення. Деякі з цих методів включають get(), keys(), values(), items(), update(), pop(), та інші. Детальніше у наступних лекціях.
7. Перебирання елементів
Ви можете перебирати ключі, значення або пари ключ-значення у словнику за допомогою циклів. Це дозволяє легко виконувати операції над елементами словника. Наприклад:
student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
print(f"{key}: {value}")
Вивід буде:
name: John
age: 20
address: 123 Main St
8. Хешованість ключів
Ключі у словнику повинні бути хешованими (від слова hash). Це означає, що ключі повинні мати хеш-значення, яке не змінюється в перебігу їх життя. Хеш-значення отримують за допомогою хеш-функції, алгоритму, який перетворює вхідні дані довільної довжини у вихідне значення фіксованої довжини. Саме його і називають хеш-значенням або хеш-кодом. Незмінювані типи даних, такі як строки, числа та кортежі, є хешованими і можуть використовуватися як ключі.
Детальніше хеш-функції та хешованість ми вивчимо у темі «Алгоритми та структури даних».
1.2 Створення словника за допомогою {}
Словники (dictionaries) в Python можна створювати кількома способами. Ось різні способи створення об'єкта словника з прикладами:
Використання фігурних дужок {}
Найбільш поширений спосіб створення словника — це використання фігурних дужок з парами ключ-значення, розділеними комами. Сама пара ключ-значення розділяється двокрапкою.
# Створення пустого словника
empty_dict = {}
# Створення словника з елементами
person = {
"name": "John",
"age": 30,
"city": "New York"
}
print(type(person))
print(person)
Важливо! Створення словника схоже на створення множини. В принципі можна навіть розглядати словник як множину, що складається з ключів, до яких прив'язані значення.
Якщо у фігурних дужках просто перелічені «ключі», то створюється множина, якщо після ключів стоїть двокрапка і вказані значення, то створюється словник. Пусті фігурні дужки – завжди словник.
# Створення пустого словника
empty_dict = {}
# Створення множини з елементами
unique_items = {
"name",
"age",
"city"
}
print(type(unique_items))
print(unique_items)
1.3 Створення словника за допомогою функції dict()
Функція dict() може використовуватися для створення словника з послідовності пар ключ-значення, а також з іменованих аргументів.
Приклад з послідовністю пар ключ-значення:
# Створення словника зі списку кортежів
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)
Приклад з іменованими аргументами. Додаткові дужки тут не потрібні:
# Створення словника з іменованими аргументами
person = dict(name="John", age=30, city="New York")
print(person)
Використання методу dict.fromkeys()
Метод fromkeys() створює словник із заданими ключами і значенням за замовчуванням.
# Створення словника з ключами та значенням за замовчуванням
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value)
print(person)
Словник буде мати три ключі, але всі вони будуть містити одне значення.
1.4 Створення словника з існуючих змінних
Словники можна створювати, використовуючи змінні як ключі та значення.
# Створення словника з змінних
name = "John"
age = 30
city = "New York"
person = {"name": name, "age": age, "city": city}
print(person)
1.5 Використання генераторів словників
Генератори словників дозволяють створювати словники за допомогою коротких і лаконічних конструкцій, схожих на генератори списків.
# Створення словника за допомогою генератора словника
squares = {x: x**2 for x in range(1, 6)}
print(squares)
1.6 Звернення до значень у словнику
Щоб отримати значення за ключем, використовується синтаксис []:
# Звернення до значень у словнику
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"]) # Виведе: John
Важливо! Якщо ключ не знайдено, виникне помилка KeyError. Щоб уникнути цього, можна використовувати метод get(), який повертає значення за ключем, якщо ключ існує, або None (або інше значення за замовчуванням), якщо ключ не знайдено.
# Використання методу get() для звернення до значень у словнику
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name")) # Виведе: John
print(person.get("address", "Адреса не знайдена")) # Виведе: Адреса не знайдена
1.7 Зміна значень у словнику
Значення в словнику можна змінювати, звертаючись до них за ключем і призначаючи нове значення.
# Зміна значень у словнику
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person) # Виведе: {'name': 'John', 'age': 31, 'city': 'New York'}
1.8 Видалення елементів із словника
Елементи можна видаляти за допомогою оператора del або методу pop().
# Видалення елемента за допомогою del
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person) # Виведе: {'name': 'John', 'city': 'New York'}
# Видалення елемента за допомогою pop()
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person) # Виведе: {'name': 'John', 'city': 'New York'}
print(age) # Виведе: 30
1.9 Перевірка наявності ключа у словнику
Ви можете перевірити, чи є ключ у словнику, використовуючи оператор in.
# Перевірка наявності ключа у словнику
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person) # Виведе: True
print("address" in person) # Виведе: False
1.10 Перебирання елементів словника
Ви можете перебирати ключі, значення або пари ключ-значення у словнику:
# Перебирання ключів у словнику
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key)
# Перебирання значень у словнику
for value in person.values():
print(value)
# Перебирання пар ключ-значення у словнику
for key, value in person.items():
print(f"{key}: {value}")
1.11 Приклади використання словників у реальних задачах
Розглянемо кілька прикладів з реального життя, де використання словників може бути корисним:
Приклад 1: Підрахунок частоти слів в тексті
Припустимо, у нас є текст, і ми хочемо підрахувати, скільки разів кожне слово зустрічається в цьому тексті.
text = "hello world hello"
word_count = {}
for word in text.split():
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count) # Виведе: {'hello': 2, 'world': 1}
Приклад 2: Зберігання даних про студентів
Ми можемо використовувати словник для зберігання даних про студентів, де ключами будуть їх ідентифікатори, а значеннями - дані про них.
students = {
"123": {"name": "John", "age": 20, "major": "Computer Science"},
"124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"]) # Виведе: John
Приклад 3: Телефонна книга
Словники можна використовувати для створення простої телефонної книги, де ключами будуть імена, а значеннями - телефонні номери.
phone_book = {
"John": "123-456-7890",
"Alice": "987-654-3210"
}
print(phone_book["Alice"]) # Виведе: 987-654-3210
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ