Programming Concepts Course
  • Економіка & Великі дані
  • Математика
  • Бізнес Економіка
  1. Словники. List Comprehension
  2. Practice Session 10
  • 👋🏻 Вітаємо на курсі!
  • Змінні, типи даних. Математичні операції в Python
    • Practice Session 2
  • Списки
    • Practice Session 6
  • Функції
    • Practice Session 8
  • Основи Git
    • Practice Session 9
  • Словники. List Comprehension
    • Practice Session 10
  • Базова робота з файлами. Обробка помилок
    • Practice Session 12
  • Обробка даних з JSON та CSV
    • Practice Session 13
  • Вступ до ООП
    • Practice Session 14
  • Базова робота з бібліотеками
    • Practice Session 15
    • Practice Session 16

Зміст

  • 📚 Словники, list comprehension та робота з даними
  • 📌 План заняття:
  • 📝 Cheat Sheet
  • ☕Coffee Warm Up
  • 👨‍💻 Live coding 1: Словник, як база даних
    • 🛠 Guided Practice:
  • 👨‍💻 Live Coding 2: Адміністрація даних
    • 🛠 Guided Practice:
  • 👨‍💻 Live Coding 3: Маніпуляції над даними з List Comprehension
    • 🛠 Guided Practice:
  1. Словники. List Comprehension
  2. Practice Session 10

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

  1. Базова робота зі словниками (Dictionaries) Словник — це колекція пар ключ: значення. Ключі завжди унікальні.
# Створення порожнього словника
my_dict = {}

# Додавання або оновлення значення
my_dict["new_key"] = "new_value"

# Вкладені словники (Словник у словнику)
db = {101: {"name": "Alice", "grades": [100, 90]}}

# Доступ до вкладених даних
alice_grades = db[101]["grades"] 
  1. Корисні методи словників
  • .get(key, default) — безпечний пошук. Повертає значення за ключем. Якщо ключа немає, повертає default (не крашить програму!).

  • .pop(key, default) — безпечне видалення. Видаляє пару за ключем і повертає значення.

  • .update(other_dict) — об’єднання. Додає до поточного словника ключі та значення з other_dict.

  1. Ітерація по словнику (Цикли)
# Пройтися тільки по ключах:
for key in my_dict.keys(): # або просто for key in my_dict:

# Пройтися тільки по значеннях:
for value in my_dict.values():

# Пройтися по парах ключ-значення:
for key, value in my_dict.items():
  1. Корисні методи для списків (в контексті словників)
  • .append(item) — додає один елемент в кінець списку.
  • .extend(list) — розширює поточний список елементами з іншого списку. Корисно, коли треба додати кілька оцінок одразу.
  1. 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: Словник, як база даних

ПопередженняDisclaimer

Оскільки ми продовжуємо працювати в нашому репозиторії з попередньої практики - обов’язково створіть

Контекст: Ми продовжуємо працювати з нашим попереднім проєктом, але тепер наша задача полягає в створенні бази даних, яка містить імена та 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!

 

© 2025 Vadym Katsel. All rights reserved.