ІТ-професії. Знайомство.
Безплатний курс для самоосвіти
3. Практичний урок 2. Робота зі словником
Робота зі словником

Спершу пригадаємо визначення словника (dictionary), яке ми вивчили минулого уроку. Словник — це структура даних, яка містить набір пар ключ-значення. Кожен елемент словника складається з ключа та відповідного йому значення. 

Словник можна створити за допомогою фігурних дужок {}, де кожен елемент містить ключ та значення, розділені двокрапкою. Наприклад, щоб створити словник із даними про фільм "The Shawshank Redemption" (взято з сайту фільмів IMDb), можна написати такий код:

Тут ми бачимо структуровані дані у форматі словника (dictionary) мовою програмування Python, що містять інформацію про фільм “The Shawshank Redemption”:

  • “rank”: “1” — ранг фільму на сайті IMDb, де 1 є найвищою позицією.
  • “title”: “The Shawshank Redemption” — назва фільму.
  • “year”: “1994” — рік випуску фільму.
  • “imDbRating”: “9.2” — рейтинг фільму на сайті IMDb, де 9.2 — оцінка, яку фільм отримав на сайті.
Доступ до елементів словника

Доступ до елементів словника можна отримати за допомогою ключа, використовуючи оператор [].

У цьому коді ми скористалися функцією print() для виведення значення двох елементів словника film_data.

Щоб вивести значення конкретного елемента словника, ми використали ключ словника в квадратних дужках після назви словника. Таким чином, film_data["title"] виведе назву фільму "The Shawshank Redemption", а film_data["imDbRating"] виведе його рейтинг на сайті IMDb, тобто число 9.2.

Отже, ми зберегли у словниках інформацію про один фільм, навчилися отримувати доступ до окремих елементів словника за ключем та виводити значення елементів.

Робота зі списками словників

Гаразд, а що як у нас є декілька словників з інформацією про різні фільми? Наприклад, створимо три різні словники, які містять інформацію про три фільми: "The Shawshank Redemption", "The Godfather" та "The Dark Knight". Кожен словник містить три ключі (title, year, imDbRating) і їх відповідні значення, які відображають заголовок фільму, рік випуску та рейтинг IMDb відповідно. Це вже цікавіше! Адже маємо вже три фільми на вибір.

Тепер ці три словника можна об'єднати у список (пригадай, що таке список з минулого уроку), оскільки всі вони містять інформацію про фільми та мають однакову структуру — кожен словник містить три ключі: 'title', 'year' та 'imDbRating'.

Об'єднання цих словників у список дозволить нам працювати з ними як з одним об'єктом, використовуючи вбудовані методи списків для здійснення різноманітних операцій, як-от додавання нових фільмів до списку, видалення фільмів, пошук фільму за певними критеріями тощо.

Отже, можна створити список, який містить ці три словники, таким чином:

В цьому прикладі, ми створили список films, що містить три словники, які своєю чергою відповідають трьом фільмам. Зверни увагу, що кожен словник розділений комою та розташований в квадратних дужках, як елемент списку.

Пригадаймо, як вивести третій елемент списку. Для цього можна використати індексацію, оскільки памʼятаємо, що елементи в списку зберігаються у визначеному порядку і мають свої номери (індекси). Нагадаємо, що у Python індекси списку починаються з нуля, тому для виведення третього елемента потрібно використати індекс 2.

Круто! Однак є більш зручний спосіб створення списку зі словників: коли ми одразу поміщаємо їх у список. Цей варіант доречний, якщо у нас велика кількість фільмів. Так можна зручніше й організованіше працювати з даними, зокрема здійснювати пошук, фільтрування та сортування елементів списку. До того ж, не потрібно створювати велику кількість змінних (film1, film2, film3 тощо).

Згадуючи попереднє практичне завдання, можемо легко провести аналогію. Маємо наступний код: 

Перший приклад movies є простим списком назв фільмів, тоді як другий films є списком словників фільмів, які містять додаткову інформацію: рік випуску та рейтинг на IMDb. Другий приклад надає більш детальну інформацію про фільми порівняно з першим.

Звісно, якщо тобі потрібен лише список назв фільмів, то першого прикладу буде цілком достатньо. Однак якщо потрібно працювати з більш детальною інформацією про фільми, краще обрати другий.

Бібліотека Cinemagoer

Можливо, ти вже замислюва_лась, якщо Python така багата на бібліотеки, то чи немає такої, що працює одразу з IMDb та видобуває інформацію про фільми?

Так і є! Раніше ця бібліотека мала назву IMDbPY. Ось тут можна детальніше прочитати про неї. IMDbPY — це бібліотека Python для отримання доступу до бази даних фільмів IMDb та даних із неї. У 2021 році пакет був перейменований у Cinemagoer. 

Ця бібліотека дозволяє легко отримувати дані про фільми з бази даних IMDb, включаючи назви, інформацію про акторів та знімальну групу, зміст, відгуки користувачів тощо. За допомогою Cinemagoer ти можеш шукати фільми, телешоу та акторів й отримувати докладну інформацію про кожен фільм або актора. Ти також можеш отримати доступ до рейтингів, відгуків та рейтингів користувачів.

Загалом Cinemagoer є потужним інструментом для роботи з даними про фільми та створення програм, які використовують цю інформацію. Детальніше про цю бібліотеку можна дізнатись з її документації.

А ми створимо невеликий код для отримання інформації про топ-250 фільмів з бази даних IMDb — і виведемо перший фільм.

Для початку потрібно інсталювати цю бібліотеку за допомогою

!pip install cinemagoer

Далі виконаємо наступний код, щоб отримати топ-250 фільмів.

# Імпортуємо бібліотеку cinemagoer (раніше відому як imdbpy)
import imdb
# Cтворюємо спеціальний "екземпляр", який буде використовуватися для взаємодії з базою даних IMDb
ia = imdb.Cinemagoer()
# Використовуємо цей "екземпляр", щоб видобути інформацію про топ-250 фільмів
top = ia.get_top250_movies()
# Виводимо список із фільмів, які нам повернула бібліотека
print(top)

Цей код також використовує бібліотеку Cinemagoer для отримання інформації про топ-250 фільмів з бази даних IMDb.

Спочатку імпортуємо модуль imdb для роботи з нашою бібліотекою (як із бібліотекою random). Далі створюємо спеціальний “екземпляр” ia, необхідний для взаємодії з базою даних IMDb.

Використовуючи його, отримуємо топ-250 фільмів з бази даних IMDb.

print(top) виводить усі 250 фільмів у вигляді списку словників, де кожен словник представляє фільм та містить інформацію про його рейтинг, назву, рік випуску та ін. Ми таке вже бачили, чи не так? 🙂

Щоб отримати інформацію лише про перший фільм, пригадаймо, як працювати зі списком.

Щоб вивести перший елемент списку, потрібно звернутись до його порядкового номера (індексу). Отже, додаємо код.

print(top[0])
Круто! Ми навчились працювати із бібліотекою cinemagoer, щоб вивести усі 250 фільмів з топу та інформацію про перший з них.

Напиши програму, яка допоможе користувачеві вибрати фільм для перегляду зі списку доступних фільмів. Для цього можна використати список фільмів, збережених у форматі словників.

Кожен словник містить таку інформацію: рейтинг фільму (rank), назва фільму (title), рік випуску (year) та рейтинг на сайті IMDb (imDbRating). Попроси програму випадково обрати тобі фільм на вечір. Після цього можна вивести на екран назву випадкового фільму та рік його виходу.

*Примітка: у цьому та наступному уроці практичні завдання двох рівнів складності, які напряму пов’язані з типовими завданнями python розробників. Ми рекомендуємо тобі виконати принаймні завдання першого рівня, але якщо ти не боїшся труднощів, то сміливо берись за виконання завдання й поглибленого рівня.

Технології, з якими працюватимеш в уроці, можуть бути для тебе зовсім нові — тому радимо тобі спершу переглянути відео, де завдання повністю виконує наша авторка (із озвучкою від нашої чарівної редакторки Ніки). Можна подивитись увесь процес, а потім починати роботу, або ж відкрити відео та паралельно виконувати завдання власноруч.
Покрокова інструкція:

1. Відкрий середовище Google Colab.

2. За необхідності увійди у Google-акаунт (справа вгорі є кнопка Увійти).

3. Обери опцію “Файл”, а далі пункт “Новий записник”.

4. Вітаємо! Записник було створено, можеш починати писати код.

5. За необхідності можеш додати клітинку, у якій писатимеш код, натиснувши на кнопку “+ Код”.

6. Імпортуй бібліотеку random, яка містить функції для генерації випадкових чисел та вибору елементів зі списку.
import random
7. Скопіюй та встав список movies з умови завдання, який містить словники з інформацією про фільми для перегляду.

movies = [{
"rank": "1",
"title": "The Shawshank Redemption",
"year": "1994",
"imDbRating": "9.2"
},
{
"rank": "2",
"title": "The Godfather",
"year": "1972",
"imDbRating": "9.1"
},
{
"rank": "3",
"title": "The Godfather: Part II",
"year": "1974",
"imDbRating": "9.0"
}]

8. Використай функцію random.choice(), яка обирає випадковий фільм зі списку movies. Результат збережи у змінну random_movie.

random_movie = random.choice(movies)

9. Виведи назву та рік випуску фільму, який було обрано випадковим чином, за допомогою функції print().

print(random_movie["title"])
print(random_movie["year"])

Так виглядатиме результат виконання практичного завдання:

У поглибленому рівні практики ми розглянемо, як працювати з IMDb API й обиратимемо фільми за допомогою запитів з цього сайту.

Що таке Application Programming Interface. IMDb API

У практичному завданні минулого уроку ми самі складали список із фільмів, які б хотіли переглянути. Цього разу розширимо діапазон і звернемось до відомого сайту IMDb, щоб обирати з великої бази фільмів.

Тут нам знадобиться поняття API — Application Programming Interface.

Ти вже знаєш, що IMDb — це вебсайт, де можна знайти інформацію про фільми, телешоу, акторів тощо. А ось IMDb API — це спосіб отримати інформацію про фільми та телешоу з сайту IMDb. IMDb API дозволяє отримати доступ до даних з нашої програми, щоб ми могли використовувати їх для наших цілей.

Загалом, API — це спосіб, за допомогою якого програми можуть обмінюватися інформацією між собою. Можна уявити, що API — це місце, де програми зустрічаються, щоб обмінюватися даними. Якщо хочеш отримати відомості з однієї програми для використання в іншій, можеш скористатися API.

На хвилинку залишимо фільми і поговоримо про погоду. Скажімо, ми хочемо дізнатися погоду у своєму місті і відобразити її на своєму смартфоні. Смартфон не збирає дані про погоду самостійно, тож нам потрібно зв'язатися з джерелом даних погоди. Це джерело даних погоди матиме своє API, яке дозволяє іншим програмам отримувати дані погоди.

Отже, ми створили б запит до API погоди, що передасть наш запит до джерела актуальних даних про погоду. Джерело даних погоди обробляє наш запит та повертає інформацію про погоду в нашому місті у форматі, зрозумілому для смартфона. Тоді ці дані будуть відображати погоду на наших пристроях.

А тепер назад до нашого практичного завдання. Припустимо, ми хочемо знайти відомості про фільм "Інтерстеллар". Ми можемо скористатися IMDb API для пошуку цього фільму та отримання відомостей про його режисера, акторів, рейтинг та іншу корисну інформацію. Нам не потрібно шукати ці відомості самостійно, бо IMDb API зробить це за нас.

Отже, IMDb API дозволяє програмі легко отримувати відомості про фільми та телешоу з вебсайту IMDb.

Щоб мати доступ до даних необхідно пройти реєстрацію. Після реєстрації, увійшовши до особистого кабінету, ти побачиш власний ключ (на зразку зафарбовано червоним, адже це приватна інформація), а також різні ендпоінти.

Ендпоінт (англ. endpoint) — це URL-адреса, за допомогою якої можна отримати доступ до певної послуги, додатка чи інтерфейсу програмування додатків (API).

Тож ендпоінт — це місце, де закінчується шлях запиту та починається шлях відповіді. Коли ми робимо запит до певного API, ми вказуємо URL-адресу ендпоінта, за допомогою якої ми звертаємося до конкретної послуги або даних, які нам потрібні.

Наприклад, пролисташи нижче цю ж саму сторінку, що і на прикладі вище, можемо отримати доступ до Топ-250 фільмів на IMDb.

Натиснувши на посилання https://imdb-api.com/en/API/Top250Movies/встав_сюди_свій_ключ , побачимо велику кількість тексту, де міститиметься інформація про кожен із Топ-250 фільмів на IMDb.

Це вигляд даних у форматі JSON (JavaScript Object Notation), який містить список фільмів із їхніми рейтингами та іншою інформацією, як-от назва фільму, рік випуску, зображення та режисери. Кожен фільм має свій унікальний ідентифікатор (id), ранг (rank), повну назву (fullTitle), рік випуску (year), зображення (image), список режисерів (crew) та рейтинг (imDbRating) разом з кількістю голосів, на основі яких цей рейтинг було визначено (imDbRatingCount).

Навіщо ж потрібен формат JSON?

JSON (або JavaScript Object Notation) — це легкий формат для обміну даними, який використовується для передачі структурованої інформації між вебсерверами та вебклієнтами. Перевага використання JSON полягає в тому, що він дозволяє легко і ефективно представляти та передавати дані у вигляді обʼєктів та масивів.

І звісно ж, серед топ-250 фільмів тут і є наш фільм "Інтерстеллар".

Бібліотека requests

Стільки даних, як програма з ними впорається? Щоб обробляти такі великі запити та їх відповіді, необхідно скористатись бібліотекою requests.

Бібліотека requests — це бібліотека для мови програмування Python, яка дозволяє здійснювати HTTP-запити до вебресурсів. HTTP-запит — це спосіб, за допомогою якого комп'ютер запитує вебсайт про інформацію. За допомогою requests можна отримувати вебсторінки та взаємодіяти з API.

Необхідно імпортувати бібліотеку в свій проєкт та використовувати її для здійснення HTTP-запитів. Наприклад, для отримання вмісту вебсторінки можна скористатися таким кодом:

Цей код відправляє запит до вебсторінки https://www.google.com та отримує її вміст (звертаємось до тексту нашої відповіді — response.text). Для більш складних операцій Requests має багато інших методів, які можна дізнатися з документації бібліотеки.

Тепер спробуймо вставити відоме нам посилання з IMDb, яке покаже Топ-250 фільмів.

import requests
response = requests.get("https://imdb-api.com/en/API/Top250Movies/встав_сюди_свій_ключик")
print(response.json())

Цей код використовує модуль requests (саме тому потрібно його імпортувати на початку програми), щоб зробити запит до API IMDb для отримання списку топ-250 фільмів. Після того, як відповідь була отримана, вона перетворюється на об'єкт Python за допомогою методу .json().

Як бачимо фільми було отримано!

Примітка: Замість червоного прямокутника помісти свій ключ. Як його знайти, читай трохи вище.
Робота з json

У попередньому прикладі IMDb API повертає відповідь в форматі JSON, який містить список фільмів з їх характеристиками (наприклад, заголовок, рік випуску, рейтинг тощо). Код використовує метод response.json() для перетворення цієї відповіді у словник Python, який може бути далі використаний для отримання необхідної інформації.

Якщо уявляти нашу відповідь як словник, то бачимо, що маємо ключ "items", який містить інші фільми — теж у вигляді словників.

Тобто у наступному прикладі за ключем "items" отримується список фільмів. Цей список може бути використаний для подальшого аналізу, обробки або відображення інформації про кожен фільм. Наприклад, можна вивести на екран назву кожного фільму, його жанр, рейтинг, дату виходу та інші характеристики.

А ми виведемо перший елемент списку фільмів, що містить загальну інформацію про фільм із найвищою оцінкою.

import requests
response = requests.get("https://imdb-api.com/en/API/Top250Movies/встав_сюди_свій_ключик")
movies = response.json()["items"]
print(movies[0])

Памʼятаєш, перший елемент у списку має індекс 0?

Тепер реалізуємо вибір фільму на вечір за допомогою IMDb API. Напиши програму, яка вибирає випадковий фільм з топ-250 фільмів IMDb API та виводить його.

Технології, з якими працюватимеш в уроці, можуть бути для тебе зовсім нові — тому радимо тобі спершу переглянути відео, де завдання повністю виконує наша авторка (із озвучкою від нашої чарівної редакторки Ніки). Можна подивитись увесь процес, а потім починати роботу, або ж відкрити відео та паралельно виконувати завдання власноруч.

Використай код з попереднього прикладу.

import requests
response = requests.get("https://imdb-api.com/en/API/Top250Movies/встав_сюди_свій_ключик")
movies = response.json()["items"]

де movies — це і є твій список для подальшого вибору випадкового фільму.

Покрокова інструкція:

1. Відкрий середовище Google Colab.

2. За необхідності увійди в Google-акаунт (справа вгорі є кнопка Увійти).

3. Обери опцію “Файл”, а далі пункт “Новий записник”.

4. Вітаємо! Записник було створено, можеш починати писати код.

5. За необхідності можеш додати клітинку, у якій писатимеш код, натиснувши на кнопку “+ Код”.

6. Імпортуй бібліотеку requests.

import requests

7. Використай метод get() з бібліотеки requests, щоб зробити запит до IMDb API та збережи результат у змінну response

response = requests.get("https://imdb-api.com/en/API/Top250Movies/k_q04uqhg1")

8. Отримай відповідь у форматі JSON з методу json() з отриманого об'єкта response як список фільмів з ключа "items" у JSON-відповіді.

movies = response.json()["items"]

9. Використай функцію random.choice() з модуля random, щоб вибрати випадковий фільм зі списку.

random_movie = random.choice(movies)

10. Виведи згенерований фільм на екран за допомогою функції print().

print(random_movie)

Так виглядатиме результат виконання практичного завдання:

Вітаємо! Ти успішно заверши_ла практику з Python-розробки і маєш не лише навички роботи з цією мовою, а й круту і корисну програму. Те саме можна зробити для книжок, рецептів — будь-чого, що тобі до смаку. Програмування на Python цікаве і може стати частиною щоденного життя, навіть якщо не схочеш працювати за цим напрямом.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Project Management в IT
UI/UX дизайн
Front-End розробка
Python розробка
QA Manual
Назад