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

Сортування та фільтрація даних

📖 Теорія
Сортування та фільтрація — найважливіші операції при роботі з даними.

Сортування:
• sorted(список) — новий відсортований список
• список.sort() — сортує на місці
• reverse=True — за спаданням
• key=функція — за користувацьким критерієм

Фільтрація:
• [x for x in data if умова] — через list comprehension
• filter(функція, дані) — вбудована функція

lambda — анонімна функція:
lambda x: x['age'] еквівалентно:
def func(x): return x['age']

Сортування словників:
• sorted(d.items(), key=lambda x: x[1]) — за значеннями
💡 Приклад коду
Вивід:

                        
📝 ЗАВДАННЯ (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
Дано список співробітників (name, salary, department). Завдання:
1) Відсортуйте за зарплатою (спадання)
2) Відфільтруйте тільки IT-відділ
3) Середня зарплата по кожному відділу
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 278
">
💡 Підказка: Для п.3: зберіть відділи через set(), для кожного відфільтруйте та порахуйте середнє.
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 287
">
🔓 Розв'язок:
employees = [
    {'name': 'Іван', 'salary': 50000, 'department': 'IT'},
    {'name': 'Марія', 'salary': 65000, 'department': 'HR'},
    {'name': 'Петро', 'salary': 55000, 'department': 'IT'},
    {'name': 'Анна', 'salary': 70000, 'department': 'IT'},
    {'name': 'Діма', 'salary': 45000, 'department': 'HR'}
]

by_salary = sorted(employees, key=lambda e: e['salary'], reverse=True)
for e in by_salary:
    print(f"{e['name']}: {e['salary']}")

it_dept = [e for e in employees if e['department'] == 'IT']
print('IT:', [e['name'] for e in it_dept])

for dept in set(e['department'] for e in employees):
    d_emps = [e for e in employees if e['department'] == dept]
    avg = sum(e['salary'] for e in d_emps) / len(d_emps)
    print(f'{dept}: {avg:.0f} грн.')
/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.
Завдання: Функція top_n
20 XP
Напишіть функцію top_n(data, key, n=3), яка повертає топ-N елементів зі списку словників за заданим ключем.
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 278
">
💡 Підказка: sorted() з key=lambda x: x[key], reverse=True та зріз [:n]
/home/u994965865/domains/navychky.com.ua/public_html/course/lesson.php on line 287
">
🔓 Розв'язок:
def top_n(data, key, n=3):
    return sorted(data, key=lambda x: x[key], reverse=True)[:n]

products = [
    {'name': 'Ноутбук', 'price': 50000},
    {'name': 'Телефон', 'price': 35000},
    {'name': 'Навушники', 'price': 5000},
    {'name': 'Монітор', 'price': 25000},
    {'name': 'Клавіатура', 'price': 3000}
]

for p in top_n(products, 'price'):
    print(f"{p['name']}: {p['price']} грн.")
/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
">