Модуль 7B: Просунуті структури даних

Вкладені структури (список словників, словник списків)

📖 Теорія
У реальних програмах дані часто мають складну структуру — списки всередині словників, словники всередині списків.

Список словників — найчастіший формат (як таблиця):
Кожен словник — один запис, ключі — назви стовпців.

Словник списків — групування даних:
Ключ — категорія, значення — список елементів.

Як працювати:
• Звернення ланцюжком: data[0]['name']
• Перебір: for item in list_of_dicts
• Додавання: list_of_dicts.append({'key': 'value'})

Порада: якщо структура здається складною — виведіть через print() з форматуванням.
💡 Приклад коду
Вивід:

                        
📝 ЗАВДАННЯ (2)
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 208
" data-task-id="
Warning: Undefined array key "id" in /home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 209
" data-xp="10">
1.
Завдання: Каталог товарів
10 XP
Створіть список словників — каталог із 3-4 товарів (name, price, quantity). Виведіть усі товари, знайдіть найдорожчий та порахуйте загальну вартість (price * quantity).
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 278
">
💡 Підказка: Для найдорожчого: max(products, key=lambda x: x['price'])
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 287
">
🔓 Розв'язок:
products = [
    {'name': 'Ноутбук', 'price': 50000, 'quantity': 5},
    {'name': 'Мишка', 'price': 1500, 'quantity': 20},
    {'name': 'Клавіатура', 'price': 3000, 'quantity': 15},
    {'name': 'Монітор', 'price': 25000, 'quantity': 8}
]

for p in products:
    total = p['price'] * p['quantity']
    print(f"{p['name']}: {p['price']} грн. x {p['quantity']} шт. = {total} грн.")

expensive = max(products, key=lambda x: x['price'])
print(f"Найдорожчий: {expensive['name']}")

total_value = sum(p['price'] * p['quantity'] for p in products)
print(f'Загальна вартість: {total_value} грн.')
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 296
">
Вивід:

                                
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 304
">

/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 208
" data-task-id="
Warning: Undefined array key "id" in /home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 209
" data-xp="20">
2.
Завдання: Журнал оцінок
20 XP
Створіть словник (ключ — ім'я учня, значення — список оцінок). Напишіть функції: 1) додати оцінку, 2) середній бал учня, 3) найкращий учень.
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 278
">
💡 Підказка: Використовуйте dict.setdefault(name, []) для безпечного додавання.
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 287
">
🔓 Розв'язок:
grades = {
    'Іван': [85, 90, 78],
    'Марія': [92, 95, 88],
    'Петро': [70, 65, 80]
}

def add_grade(grades, name, grade):
    grades.setdefault(name, [])
    grades[name].append(grade)

def avg_grade(grades, name):
    if name not in grades: return 0
    return sum(grades[name]) / len(grades[name])

def best_student(grades):
    return max(grades, key=lambda n: avg_grade(grades, n))

add_grade(grades, 'Анна', 95)
add_grade(grades, 'Анна', 100)

for name in grades:
    print(f'{name}: середній = {avg_grade(grades, name):.1f}')
print(f'Найкращий: {best_student(grades)}')
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 296
">
Вивід:

                                
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 304
">