НМЦ

Програмування мовою Python: основи та практика

Електронний посібник

ВФПО

ТЕМА 7.3. СЛОВНИКИ

 

 

 

 

роки Python з нуля / #10 – Словники (dict) та робота з ними

 

Презентація. Словники в PYTHON №7.3

 

 

Звичайні списки ‒ це набір елементів, кожен з яких має свій порядковий номер, тобто індекс.

 

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

У певному сенсі словники можна розглядати як дещо середнє між списками і множинами.

 

Словник ‒ це структура даних, що дає змогу зберігати об’єкти з доступом за унікальними ключами.

 

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

У словнику дані представлені парами «ключ: значення», відокремленими комами та обведеними фігурними дужками. Наприклад: {‘A1’:2, ‘A2’:3}. Словники можна змінювати, додавати нові елементи з унікальними ключами та видаляти існуючі. Розмір використовуваної пам’яті словника пропорційний його розміру. Порівняно зі звичайними списками доступ до елементів словника виконується повільніше, але загалом є досить швидким.

 

 

Для задання порожнього словника можна скористатися однією з команд:

>>> a={}

>>> b=dict()

 

Задання словника з наперед заданим набором елементів:

>>> a={‘A1’:2, ‘A2’:3}

>>> b=dict(id1=4, id2=8)

>>> print(b)

{‘id1’: 4, ‘id2’: 8}

 

Варто відмітити, що у разі створення словника, в якого ключем має виступати число або кортеж, можливе використання лише першої команди:

>>> a={1: ‘A1’, 2: ‘A2’}

>>> a={(1,2,3):2, ‘A2’:3}

 

Крім того, словник можна створити, використовуючи генератори:

>>> d={x: x**2 for x in (2, 4, 6)}

>>> print(d)

{2: 4, 4: 16, 6: 36}

 

 

У словниках доступ до їхніх елементів відбувається за допомогою ключів. Елементами словника є пари ключ-значення, тому саме доступу до окремого елементу словника, як в списку, немає. Для отримання значення конкретного елементу словника використовується його ключ.

Щоб звернутися до значення певного елементу словника, потрібно вказати ім’я словника та в квадратних дужках вказати його ключ (ім’я_словника[ключ]).

>>> e={‘A1’:2, ‘A2’:3}

>>> print(e[‘A2’])

3

За спроби доступу за неіснуючим у словнику ключем виникає виняток KeyError.

>>> print(e[‘A3’])

Traceback (most recent call last):

   File «<pyshell#99>«, line 1, in <module>

   print(e[‘A3’])

KeyError: ‘A3’

Можна перевірити приналежність деякого ключа до словника, використовуючи оператор in (ключ in ім’я_словника).

>>> e={‘A1’:2, ‘A2’:3}

>>> ‘A1’ in e

True

>>> ‘A3’ in e

False

Також можна перевірити наявність певного значення в словнику, проте така перевірка відбуватиметься за результатом методу values().

>>> e={‘A1’:2, ‘A2’:3}

>>> 2 in e.values()

True

За необхідності можна організувати перебір ключів усіх елементів словника.

d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

for k in d:

print(k, d[k])

 

Зміна значень словника

 

Оскільки словники є змінюваними, їх можна модифікувати, зокрема змінювати значення їхніх елементів. Щоб змінити значення конкретного елементу словника, потрібно вказати ім’я словника, в квадратних дужках вказати його ключ та призначити нове значення (ім’я_словника[ключ]=нове_значення).

>>> e={‘A1’:2, ‘A2’:3}

>>> e[‘A1’]=5

>>> print(e)

{‘A1’: 5, ‘A2’: 3}

 

Додавання елементів до словника

 

Щоб додати елемент до словника, потрібно вказати ім’я змінної словника та в квадратних дужках новий ключ і виконати присвоєння нового значення (ім’я_словника[новий_ключ]=значення).

>>> e={‘A1’:2, ‘A2’:3}

>>> e[‘A3’]=4

>>> print(e)

{‘A1’: 2, ‘A2’: 3, ‘A3’: 4}

 

Вилучення елементу зі словника

 

Для видалення елементу зі словника можна скористатися командою del (del ім’я_словника[ключ]).

>>> e={‘A1’:2, ‘A2’:3}

>>> del e[‘A1’]

>>> print(e)

{‘A2’: 3}

 

Так само, як для списків, для словників є генератори. Якщо порівнювати генератор словників із генератором списків, то є деякі відмінності (їх дві):

v На відміну від генератора списку, який береться у прямокутні дужки, генератор словника береться у фігурні дужки.

v У разі створення словника за допомогою генератора за кожну ітерацію (цикл) доводиться «генерувати» два параметри: ключ і елемент. Ключ і елемент розділяють двокрапкою.

Наприклад, якщо у нас є два списки clr=[«червоне», «жовте», «зелене»] і txt=[«стоїмо», «чекаємо», «рухаємося»], то командою A={clr[i]:txt[i] for i in range(len(clr))} створюється словник, у якому елементи першого списку clr відіграють роль ключів, а відповідні їм елементи другого списку txtвласне елементів словника A.

 

7.3.3. Методи словників

 

dict.fromkeys(iterable [, value]). Створює новий словник, ключами якого будуть елементи з iterable і однаковим для всіх значенням value.

>>> d.fromkeys([‘a’, ‘b’, ‘c’],12)

{ ‘a’: 12, ‘b’: 12, ‘c’: 12}}

dict.update([other]). Доповнює словник dict парами (ключ=значення) зі словника other, якщо ключ вже є в словнику, то його значення оновлюється.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> s={‘A1’:13, ‘A5’:15}

>>> d.update(s)

>>> print(d)

{‘A1’: 13, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7, ‘A5’: 15}

dict.copy(). Повертає копію словника dict.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> e=d.copy()

>>> print(e)

{‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

dict.get(key[, default]). Повертає значення зі словника dict за ключем key. У випадку відсутності елементу з ключем key повертається значення default.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> d.get(‘A2’, 10)

3

>>> d.get(‘A8’, 10)

10

dict.setdefault(key[, default]). Повертає значення зі словника dict за ключем key. У випадку відсутності елементу з ключем key повертається значення default, і до словника додається елемент з ключем key і значенням default.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> d.setdefault(‘A1’, 13)

1

>>> d.setdefault(‘A5’, 13)

13

>>> print(d)

{‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7, ‘A5’: 13}

dict.keys(). Повертає ключі елементів словника dict у формі обєкта перегляду словника, що забезпечують динамічний перегляд записів словника.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> d.keys()

dict_keys([‘A1’, ‘A2’, ‘A3’, ‘A4’])

dict.values(). Повертає значення елементів словника dict у формі об’єкта перегляду словника, що забезпечують динамічний перегляд записів словника.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> d.values()

dict_values([1, 3, 5, 7])

dict.items(). Повертає ключі та значення елементів словника dict у формі обєкта перегляду словника, що забезпечують динамічний перегляд записів словника. Елементи словника подаються у формі кортежів (ключ, значення).

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5}

>>> d.items()

dict_items([(‘A1’, 1), (‘A2’, 3), (‘A3’, 5)])

dict.pop(key[, default]). Вилучає зі словника dict елемент з ключем key та повертає його значення як результат виконання функції. У випадку відсутності елементу з ключем key повертається значення default. Якщо default не вказаний, і елемента з ключем key немає, то виникає виняток KeyError.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> d.pop(‘A2’) 3

>>> print(d)

{ ‘A1’: 1, ‘A3’: 5, ‘A4’: 7}

dict.popitem(). Вилучає і повертає пару (ключ, значення) зі словника dict як результат виконання функції. Пари повертаються в порядку LIFO (last-in first-out). Якщо словник порожній, то виникає виняток KeyError.

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> print(d)

{‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> d.popitem() (‘A4’, 7)

>>> print(d)

{‘A1’: 1, ‘A2’: 3, ‘A3’: 5}

dict.clear(). Очищує словник dict (вилучає всі елементи зі словника).

>>> d={‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> print(d)

{‘A1’: 1, ‘A2’: 3, ‘A3’: 5, ‘A4’: 7}

>>> d.clear()

>>> print(d)

{}

 

Якщо під час звертання до елементу словника вказати неправильний ключ (ключ, якого в словнику немає), виникне помилка. Є метод get(), який дає змогу за ключем отримати значення елементу словника. При цьому, якщо вказано неіснуючий ключ (аргумент методу), помилки не буде (як метод повертається «порожнє» значення None). Методу get() можна передати другий аргумент – це значення повертатиметься як результат методу за неправильного ключа.

 

 

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

p1={‘x’:0, ‘y’:0}

p2={‘x’:0, ‘y’:0}

print(введіть координати 1-ї точки: ‘)

p1[‘x’]=float(input(‘x:’))

p1[‘y’]=float(input(‘y:’))

print(введіть координати 2-ї точки: ‘)

p2[‘x’]=float(input(‘x:’))

p2[‘y’]=float(input(‘y:’)) import math

import math

lenP=math.sqrt((p1[‘x’]-p2[‘x’])**2+(p1[‘y’]- p2[‘y’])**2)

print(відстань між точками ({}; {}) та ({}; {}) =

  {:.3}’.format(p1[‘x’], p1[‘y’], p2[‘x’], p2[‘y’],lenP))

 

Приклад. Робота зі словниками

# Створюємо словник

symbs=dict([[ʺaʺ,ʺпершийʺ],[ʺbʺ,ʺдругийʺ]])

# Створюємо ще один словник

more_symbs=dict([[ʺcʺ,ʺтретійʺ],[ʺdʺ,ʺчетвертийʺ]])

# Додаємо другий словник у перший

symbs.update(more_symbs)

# Вміст словника

printСловник:ʺ,symbs)

# Довжина словника

print(ʺКількість ключів у словнику:ʺ,len(symbs))

# Доступ до елементу за ключем (ключ у словнику є)

print(ʺЕлемент із ключем ‘с’:ʺ,symbs.get(ʺcʺ,ʺнемає такого ключа!ʺ))

# Перевіряємо наявність ключа в словнику

print(ʺНаявність елементу з ключем ‘с’:ʺ,ʺcʺ in symbs)

# Видаляємо елемент зі словника

del symbs[ʺcʺ]

# Вміст словника

printСловник:ʺ,symbs)

# Доступ до елементу за ключем (ключа в словнику немає)

print(ʺЕлемент з ключем ‘с’:ʺ,

symbs.get(ʺcʺ,ʺнемає такого ключа!ʺ))

# Перевіряємо наявність ключа в словнику

print(ʺНаявність елементу з ключем ‘с’:ʺ,ʺcʺ in symbs)

# Список ключів словника

print(ʺКлючі словника:ʺ,list(symbs.keys()))

# Список значень елементів словника

print(ʺЗначення елементів словника:ʺ,list(symbs.values()))

# Вміст словника

print(ʺВміст словника:ʺ,list(symbs.items()))

# Видалення елементу зі словника

print(ʺВидаляється елемент зі значенням:ʺ,symbs.pop(ʺbʺ))

# Вміст словника

printСловник:ʺ,symbs)

# Очистка словника

symbs.clear()

# Вміст словника

printСловник:ʺ,symbs)

Результат виконання програми

Словник: {‘b’: ‘другий’, ‘c’: ‘третій’, ‘a’: ‘перший’,

‘d’: ‘четвертий’}

Кількість ключів у словнику: 4

Елемент із ключем ‘с’: третій

Наявність елементу з ключем ‘с’: True

Словник: {‘b’: ‘другий’, ‘a’: ‘перший’, ‘d’: ‘четвертий’}

Елемент з ключем ‘с’: немає такого ключа!

Наявність елементу з ключем ‘с’: False

Ключі словника: [‘b’, ‘a’, ‘d’]

Значення елементів словника: [‘другий’, ‘перший’, ‘четвертий’]

Вміст словника: [(‘b’, ‘другий’), (‘a’, ‘перший’), (‘d’, ‘четвертий’)]

Видаляється елемент зі значенням: другий Словник: {‘a’: ‘перший’, ‘d’: ‘четвертий’}

Словник: {}

 

Завдання для самоперевірки

Завдання 1. Для завдання розробити алгоритм та написати відповідну програму з виведенням результатів на екран.

1. Описати запис/структуру STUDENT, яка містить поля:

v прізвище та ініціали;

v номер групи;

v успішність (масив з п’яти елементів).

Скласти програму, яка виконує такі дії:

v введення з клавіатури даних в масив з 10 елементів типу STUDENT; записи мають бути впорядкованими за зростанням номера групи;

v виведення на екран прізвищ та номерів груп для всіх студентів, середній бал яких більший ніж 4,0;

v якщо таких студентів немає, вивести відповідне повідомлення.

2. Описати запис/структуру STUDENT, яка містить такі поля:

v прізвище та ініціали;

v номер групи;

v успішність (масив з п’яти елементів).

Скласти програму, яка виконує такі дії:

v введення з клавіатури даних в масив з 10 елементів типу STUDENT; записи мають бути впорядкованими за зростанням середнього бала;

v виведення на екран прізвищ та номерів груп для всіх студентів, які мають оцінки «4», «5»;

v якщо таких студентів немає, вивести відповідне повідомлення.

3. Описати запис/структуру STUDENT, яка містить такі поля:

v прізвище та ініціали;

v номер групи;

v успішність (масив з п’яти елементів).

Скласти програму, яка виконує такі дії:

v введення з клавіатури даних в масив з 10 елементів типу STUDENT; записи мають бути впорядкованими за алфавітом;

v виведення на екран прізвищ та номерів груп для всіх студентів, які мають принаймні одну оцінку «2»;

v якщо таких студентів немає, вивести відповідне повідомлення.

4. Описати запис/структуру AEROFLOT, яка містить такі поля:

v назва пункту призначення рейсу;

v номер рейсу;

v тип літака;

Скласти програму, яка виконує такі дії:

v введення з клавіатури даних в масив з семи елементів типу AEROFLOT; записи мають бути впорядкованими за зростанням номера рейсу;

v вивести на екран номера рейсів і типів літака, що вилітають в пункт призначення, назва якого збігається із назвою, введеною з клавіатури;

v якщо таких рейсів немає, вивести відповідне повідомлення.

 

 

Ø Словник є невпорядкованим набором елементів. Доступ до елементів словника виконується за ключем.

Ø Для створення словника використовують функцію dict(), аргументом якій передають список з елементами-списками. Кожен такий внутрішній список складається з двох елементів: значення ключа і значення елементу. Можна також створити словник, узявши у фігурні дужки, розділені двокрапкою, ключі й значення відповідних елементів.

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

Ø Метод keys() дає змогу отримати доступ до ключів словника. Для доступу до значень словника використовують метод values(). Метод items() повертає кортежі з ключами і значеннями елементів словника.

Ø Для видалення елементу зі словника застосовують метод pop(). Для додавання декількох елементів використовують метод update(). Новий елемент у словник можна додати, присвоївши значення елементу з новим ключем: після імені словника у квадратних дужках указується ключ елементу, який додають, і після оператора присвоювання (знака рівності) значення елементу.

Ø Поверхневу копію словника створюють за допомогою методу copy(), а повну копію можна створити за допомогою функції deepcopy() з модуля copy.

Ø Генератор словника беруть у фігурні дужки й водночас створюють два параметри: ключ і відповідний йому елемент словника.

 

Питання для перевірки засвоєних знань

1. Що таке словник у Python?

2. Як створити порожній словник?

3. Як створюють словник із заданими ключами та значеннями?

4. Як відбувається додавання нових ключів та їх значень у словник?

5. Яке використання різних типів даних як ключів?

6. Що таке однаковість ключів у словнику?

7. Як відбувається видалення ключа та його значення зі словника?

8. Як перевірити наявність ключа у словнику?

9. Як отримати список ключів у словнику?

10. Як отримати список значень у словнику?

11. Як змінити значення ключа у словнику?

12. Як видалити ключ та його значення зі словника?

13. У чому полягає відмінність методів pop() та del для видалення елементів словника?

14. Як перевірити наявність ключа перед його використанням?

15. Які є методи для отримання всіх ключів та значень у словнику?

16. Як використовують словник для передачі декількох значень з функцій?

17. Які є операції над словниками?

18. Як відбувається додавання нових елементів із іншого словника?

19. Як відбувається очищення словника від усіх його елементів?

20. Як перевіряють наявність певного значення у словнику?

Попередня тема

На початок

Наступна тема