Вкладені структури (список словників, словник списків)
📖 Теорія
У реальних програмах дані часто мають складну структуру — списки всередині словників, словники всередині списків.
Список словників — найчастіший формат (як таблиця):
Кожен словник — один запис, ключі — назви стовпців.
Словник списків — групування даних:
Ключ — категорія, значення — список елементів.
Як працювати:
• Звернення ланцюжком: 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
">