# Створення порожнього словника
my_dict = {}
# Додавання або оновлення значення
my_dict["new_key"] = "new_value"
# Вкладені словники (Словник у словнику)
db = {101: {"name": "Alice", "grades": [100, 90]}}
# Доступ до вкладених даних
alice_grades = db[101]["grades"] Practice Session 10
📚 Словники, list comprehension та робота з даними
Сьогодні ми навчимося зберігати та обробляти зв’язну інформацію ефективно. Розберемося, як словники дозволяють миттєво знаходити дані за ключем без прив’язки до індексів, і як list comprehensions допомагають фільтрувати ці дані всього в один рядок коду.
📌 План заняття:
- 👨💻 Live coding 1: Словник, як база даних
- 🛠 Guided Practice
- 👨💻 Live coding 2: Словник, як база даних
- 🛠 Guided Practice
- 👨💻 Live Coding 3: Маніпуляції над даними з List Comprehension
- 🛠 Guided Practice
📝 Cheat Sheet
- Базова робота зі словниками (Dictionaries) Словник — це колекція пар ключ: значення. Ключі завжди унікальні.
- Корисні методи словників
.get(key, default)— безпечний пошук. Повертає значення за ключем. Якщо ключа немає, повертає default (не крашить програму!)..pop(key, default)— безпечне видалення. Видаляє пару за ключем і повертає значення..update(other_dict)— об’єднання. Додає до поточного словника ключі та значення з other_dict.
- Ітерація по словнику (Цикли)
# Пройтися тільки по ключах:
for key in my_dict.keys(): # або просто for key in my_dict:
# Пройтися тільки по значеннях:
for value in my_dict.values():
# Пройтися по парах ключ-значення:
for key, value in my_dict.items():- Корисні методи для списків (в контексті словників)
.append(item)— додає один елемент в кінець списку..extend(list)— розширює поточний список елементами з іншого списку. Корисно, коли треба додати кілька оцінок одразу.
- List Comprehension (Генератори списків) Синтаксис для створення списків в один рядок.
[що_додати for елемент in колекція if умова]
# Приклад: витягнути всі імена з нашої бази
names = [data["name"] for data in db.values()]
# Приклад: імена лише тих студентів, у кого є більше 3 оцінок
top_students = [data["name"] for data in db.values() if len(data["grades"]) > 3]☕Coffee Warm Up
- У нас є словник з цінами:
menu = {"Latte": 60, "Americano": 40}. Клієнт питає, скільки коштує Американо. Яким одним рядком коду ми можемо дістати цю цифру? - Інфляція. Лате тепер коштує 70 грн. А ще ми додали в меню Капучино за 65 грн. Як оновити словник?
- Клієнт просить “Flat White”. Ми знаємо, що якщо написати
menu["Flat White"], програма впаде з помилкоюKeyError, бо такого ключа немає. Як перевірити, чи є цей напій в меню, повертаючиTrueабоFalse?
👨💻 Live coding 1: Словник, як база даних
Оскільки ми продовжуємо працювати в нашому репозиторії з попередньої практики - обов’язково створіть
Контекст: Ми продовжуємо працювати з нашим попереднім проєктом, але тепер наша задача полягає в створенні бази даних, яка містить імена та ID cтудентів. Задача полягає в створенні такої структури, яка могла би вміщати в себе дані студентів, та з якою можна було би з легкістю проводити маніпуляції на кшталт додавання нових студентів, або видалення вже присутніх.
Вхідні дані: Набір пар: унікальний ID студента та його ім’я. Наприклад, "Alice", 1
Очікуваний результат: Вивід імен та ID усіх студентів.
🛠 Guided Practice:
Контекст: Зберігання імен та ID студентів дозволяє нам розв’язати певні, проте доволі обмежені задачі. Перед нами постала проблема розширення нашої бази даних до такого вигляду, аби вона могла зберігати не лише ім’я студента, а і список його оцінок. Вашою метою є створення словника, який би задовольняв наші потреби в збереженні даних, а потім вивести усі дані про студентів на екран.
- Створіть новий порожній словник
- Ітеративно заповніть ключі та значення цього словника даними, які є у
students_db - До кожного значення додайте пустий список оцінок. Формат значення:
{"name": "ім'я_студента", "grades": []} - [BONUS] Заповніть список оцінок одного зі студентів випадковими значеннями
Вхідні дані: Словник виду students_db = {ID: name} з попередньої задачі.
Очікуваний результат: Оновлений cловник виду {ID: {"name": "ім'я_студента", "grades": []}}
Пам’ятайте, що для того, аби додати значення до словника ви маєте скористатися синтаксисом на кшталт dictionary[new_key] = new_value
👨💻 Live Coding 2: Адміністрація даних
Контекст: Наша новоспечена база даних працює! Проте, нашої з вами роботи виявилося замало, і окрім всіх речей, які ми зробили, нам потрібно вміти безпечно шукати студентів, відраховувати їх, та масово зараховувати нових студентів. Для того, аби ми могли зручно це робити, нам потрібно імплементувати три функції обгортки: search_student(db, id), expel_student(db, id) та add_students(db, students_dict)
Вхідні дані:
- Наша базова структура: db (словник студентів з попереднього завдання).
- Дані для тестування функцій:
- Для пошуку: існуючий id (напр., 101) та неіснуючий (напр., 999).
- Для відрахування: id студента (напр., 102).
- Для зарахування: словник з новачками
new_students = {104: {"name": "David", "grades": []},
105: {"name": "Eve", "grades": []}}Очікуваний результат:
search_student(ab, id)безпечно повертає словник з даними студента або повідомлення “Не знайдено”.expel_student(db, id)видаляє запис з db та повертає дані відрахованого студента (або сповіщає, якщо такого ID немає).add_students(db, students_dict)розширює db новими записами (нічого не повертає, просто мутує оригінальний словник).
🛠 Guided Practice:
Контекст: Ми покрили майже всі нюанси адміністрування нашої бази даних, окрім додавання оцінок для вже існуючих студентів. Вам потрібно написати функцію add_grade(db, student_id, grades), яка повинна знайти студента за його ID і додати нові оцінки до його списку “grades”. Якщо студента з таким ID не існує — вивести попередження.
Вхідні дані: База даних students_db з попереднього завдання. Спробуйте додати оцінки [95, 100] студенту з ID 101 та оцінку [80, 90] студенту з ID 999.
Очікуваний результат: У студента 101 в списку оцінок мають з’явитися нові оцінки. При спробі додати оцінку студенту 999 на екран має вивестись повідомлення з помилкою.
- Використайте оператор in для перевірки наявності ID.
- Використайте метод списків .extend(), щоб додати елементи до існуючого списку оцінок.
👨💻 Live Coding 3: Маніпуляції над даними з List Comprehension
Контекст: Наша база даних розростається, і часто нам не потрібна вся інформація одразу, а лише конкретні вибірки. Наприклад, нас просять надати просто список імен усіх студентів для розсилки, а потім — окремий список тих, хто має хоча б одну оцінку “100”.
Вхідні дані: Наша поточна база students_db
Очікуваний результат:
- Список усіх імен
- Список тих, у кого є 100 балів
🛠 Guided Practice:
Контекст: І як ваше фінальне завдання, вам потрібно вирахувати тих студентів, які, на жаль чи на щастя, залік цього терму не отримають. Умови отримання заліку: мати хоча би 3 оцінки. Всі, хто мають менше за 3 - залік не отримують
Вхідні дані: Ви можете оновити попередню базу даних, аби в різних студентів була різна кількість оцінок, або ж використати нову, запропоновану нижче:
db_for_test = {
101: {"name": "Alice", "grades": [100, 95, 90]}, # Здала все
102: {"name": "Bob", "grades": [70, 75]}, # Боржник
103: {"name": "Charlie", "grades": [85]} # Боржник
}Очікуваний результат: Список імен ["Bob", "Charlie"] студентів, які не отримають залік
Для розв’язання цього завдання використовуйте тільки list comprehension!