Словники і їхні методи

 

Словники і їхні методи

Словники — змінюваний тип даних, що містить у собі пари «ключ»: «значення». Тобто дані всередині словника є іменованими та невпорядкованими, а отримати значення можна потягнувши за ниточку, якою є ключ. Створимо словник:

my_dict = {}

Перший словник готовий, але, як бачимо, він пустий. Тому створимо ще один, але наповнений елементами:

my_dict = {}
my_dict_2 = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone": 1}
print(my_dict)
print(my_dict_2)

Отримаємо (відео 1):

Відео 1 

Тепер, коли маємо наповнений словник, дістанемо дані з нього. Для цього звернемося до словника за ключем:

my_dict = {}
my_dict_2 = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
value = my_dict_2["Macbook"]
print(value)

Запустимо код (відео 2):

Відео 2

Схожий синтаксис використовується і для додавання елементів:

my_dict = {}
my_dict_2 = {"Macbook": "Pro", "Developer" : "Nick", "Iphone" : 1}
key = "fruit"
value = "orange"
my_dict_2[key] = value
print(my_dict_2)

Результат (відео 3):

Відео 3

Звісно, використовувати змінні, як у наведеному прикладі, зовсім необов'язково, замість них у квадратні дужки можна просто ввести дані, що будуть ключем, а після знаку «=» ввести значення.

З допомогою методу update() можна внести елементи з іншого словника, який передається всередину дужок:

my_dict = {"Developer" : "Ann"}
my_dict_2 = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
my_dict.update(my_dict_2)
print(my_dict)
print(my_dict_2)

Виконаємо код (відео 4):

Відео 4

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

Створити словник можна також з допомогою методу dict.fromkeys(), у який необхідно передати два елементи. Перший буде використано як ключ, причому, якщо передати масив даних, ключами стануть окремі елементи масиву. Другим елементом є значення. Треба зазначити, що всі ключі отримають однакове значення. Запишемо:

my_dict = dict.fromkeys(("Macbook", "Iphone"), 1)
print(my_dict)

Отримали словник (відео 5):

Відео 5

Якщо ж у дужки передати один елемент, ключі генеруватимуться так само, але набудуть значення None, тобто пустоти:

my_dict = dict.fromkeys(("Apple", "Iphone"))
print(my_dict)

Якщо запустити код, побачимо (відео 6):

Відео 6

Під час роботи зі словниками можна окремо отримати значення ключів. Це завдання реалізовується використанням методу keys():

my_dict = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
print(my_dict.keys())

Отримаємо (відео 7):

Відео 7

Аналогічно до ключів, окремо можна отримати значення. Цьому посприяє метод values():

my_dict = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
print(my_dict.values())

Маємо (відео 8):

Відео 8

Оскільки окремо можна отримати ключі та значення, то можна й пари «ключ»: «значення» скориставшись методом items():

my_dict = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
print(my_dict.items())

Отримаємо (відео 9):

Відео 9

Часто словники мають дуже великий об'єм і постає необхідність перевірити наявність ключа. Якщо ми виведемо значення ключа, що не існує в словнику, знайомим способом, отримаємо помилку. Щоби уникнути помилок використовуються методи get() і setdefault(). Різниця між ними полягає в тому, що за відсутності шуканого ключа, перший поверне None, а другий створить шуканий ключ і присвоїть йому значення None. Перевіримо роботу методів, записавши:

my_dict = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
print(my_dict.get("Developer"))
print(my_dict.get("Key"))
print(my_dict)
print(my_dict.setdefault("Developer"))
print(my_dict.setdefault("Key"))
print(my_dict)

Запустимо код (відео 10):

Відео 10

Словники, як і деякі інші типи даних мають метод pop(), та в цьому випадку відрізняються необхідністю передачі ключа всередину дужок. Якщо ж передати ключ, що не існує, виникне помилка:

my_dict = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
print(my_dict)
print(my_dict.pop("Macbook"))
print(my_dict)
print(my_dict.pop("Key"))

Маємо (відео 11):

Відео 11

А ось метод popitem() видаляє зі словника пару «ключ»: «значення» повертаючи їх. Запишемо:

my_dict = {"Macbook" : "Pro", "Developer" : "Nick", "Iphone" : 1}
print(my_dict.popitem())
print(my_dict)

Запустимо код (відео 12):

Відео 12

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

Журнал юзера

Створимо журнал юзера. З допомогою цього журналу можна швидко дізнатися номер телефону або посилання на соціальні мережі ваших знайомих (мал. 1).

RTTT-owCWTueJI5tQVxY74hR_wMi79d0
Малюнок 1

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

my_dict = {"Nick" : {}, "Ann" : {}, "Jane" : {}}

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

my_dict = {"Nick" : {"Phone" : "0735558895", "instagram" : "@nick465", "tiktok" : "@nicklike"}, "Ann" : {"Phone" : "0995588401", "instagram" : "@ann582", "tiktok" : "@ann_02"}, "Jane": {"Phone" : "0505314589", "instagram" : "@jane_me", "tiktok" : "@janeforme"}}

Тепер, маючи контакти, лишається створити змінну, яка й буде виведена при отриманні запиту від користувача й вміщуватиме цільову інформацію. Сам запит створюється введенням користувачем ключа з допомогою input() і наступним зверненням до словника по ньому:

my_dict = {"Nick" : {"Phone" : "0735558895", "instagram" : "@nick465", "tiktok" : "@nicklike"}, "Ann" : {"Phone" : "0995588401", "instagram" : "@ann582", "tiktok" : "@ann_02"}, "Jane": {"Phone" : "0505314589", "instagram" : "@jane_me", "tiktok" : "@janeforme"}}
user = my_dict[input()]
print(user)

Запустивши код, маємо (відео 13):

Відео 13

Отже, звернувшись за іменем, одержуємо дані контакту. Оскільки нам потрібна більш конкретна інформація, повторно додамо квадратні дужки з input() всередині, щоби звернутись до отриманого словника за іншим ключем та повернути кінцеві дані:

my_dict = {"Nick" : {"Phone" : "0735558895", "instagram" : "@nick465", "tiktok" : "@nicklike"}, "Ann" : {"Phone" : "0995588401", "instagram" : "@ann582", "tiktok" : "@ann_02"}, "Jane": {"Phone" : "0505314589", "instagram" : "@jane_me", "tiktok" : "@janeforme"}}
user = my_dict[input()][input()]
print(user)

Запустимо код (відео 14):

Відео 14

Але проблема нашої програми в тому, що користувач не знає, що саме має вводити, а тому додамо підказки у функції input(). Кінцевий код програми набуде вигляду:

my_dict = {"Nick" : {"Phone" : "0735558895", "instagram" : "@nick465", "tiktok" : "@nicklike"}, "Ann" : {"Phone" : "0995588401", "instagram" : "@ann582", "tiktok" : "@ann_02"}, "Jane": {"Phone" : "0505314589", "instagram" : "@jane_me", "tiktok" : "@janeforme"}}
user = my_dict[input("Enter a name ")][input("Enter the contact type ")]
print(user)

Перевіримо роботу програми (відео 15):

Відео 15

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

На наступному занятті дізнаємось багато нового, навчившись перетворювати дані одного типу в інший.