Тема 13
Словники та множини

© Яценко Р.М., 2019-2023

Навчальний центр комп'ютерних технологій "Кит"

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

1. Призначення та створення словників


Визначення словника

  • Структура даних, що дозволяє ідентифікувати її елементи не за числовим індексом, а за довільним, називається словником або асоціативним масивом

  • Відповідна структура даних у мові Python називається dict


Приклад 1. Країни та столиці

# Створимо порожній словник Capitals та заповнимо його значеннями Capitals = {} Capitals['Ukraine'] = 'Kyiv' Capitals['Poland'] = 'Warsaw' Capitals['USA'] = 'Washington' # Пошук столиць для списку Countries = ['Poland', 'France', 'USA', 'Ukraine'] for country in Countries: # Для кожної країни зі списку перевіримо, чи є вона у Capitals if country in Capitals: print('Столиця країни ' + \ country + ': ' + Capitals[country]) else: print('У базі немає країни з назвою ' + country)

Столиця країни Poland: Warsaw
У базі немає країни з назвою France
Столиця країни USA: Washington
Столиця країни Ukraine: Kyiv

Елементи словника

  • Отже, кожен елемент словника складається з двох об'єктів:

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


Приклади

  • Вікіпедія. Ключем словника є слово-заголовок статті, а значенням — сама стаття. Щоб отримати доступ до статті, необхідно вказати слово-ключ

  • Контакти в телефоні. У цьому словнику ключем є ім'я, а значення номер телефону


Динамічність словника

  • Особливістю словника є його динамічність до нього можна додавати нові елементи з довільними ключами і видаляти вже існуючі елементи

  • При цьому розмір пам'яті, що використовується, пропорційний розміру словника. Доступ до елементів словника виконується хоч і повільніше, ніж до звичайних списків, але загалом досить швидко


Коли потрібно використовувати

  1. Підрахунок кількості якихось об'єктів. І тут потрібно завести словник, у якому ключами є об'єкти, а значеннями їх кількість

  2. Зберігання будь-яких даних, пов'язаних з об'єктом. Ключі об'єкти, значення пов'язані з ними дані

Days['January'] = 31 
Days['February'] = 28 
...

  1. Встановлення відповідності між об'єктами (наприклад, “батько-нащадок”). Ключ - об'єкт, значення - відповідний йому об'єкт

  2. Якщо потрібен звичайний масив, але масимальне значення індексу елемента дуже велике, і при цьому будуть використовуватися не всі можливі індекси (так званий "розріджений масив"), то можна використовувати словник (асоціативний масив) для економії пам'яті


Приклад 2. Створення словника

Порожній словник можна створити за допомогою функції dict() або порожньої пари фігурних дужок {}

Capitals = {'Ukraine': 'Kyiv', 'Poland': 'Warsaw', 'USA': 'Washington'} Capitals = dict(Ukraine = 'Kyiv', Poland = 'Warsaw', USA = 'Washington') Capitals = dict([("Ukraine", "Kyiv"), ("Poland", "Warsaw"), ("USA", "Washington")]) Capitals = dict(zip(["Ukraine", "Poland", "USA"], ["Kyiv", "Warsaw", "Washington"])) print(Capitals)
{'Ukraine': 'Kyiv', 'Poland': 'Warsaw', 'USA': 'Washington'}

2. Робота з елементами словника


Отримання значення елемента

  • Основна операція отримання значення елемента по ключу записується так само, як і для списків: A[key]

  • Якщо елемента із заданим ключем немає у словнику, виникає помилка KeyError


Метод get

A.get(key)

  • Якщо елемента з ключем key немає у словнику, то повертається значення None

  • У формі запису з двома аргументами A.get(key, value) метод повертає значення value, якщо елемент із ключем key відсутній у словнику


Перевірка приналежності

Перевірити приналежність елемента словнику можна операціями in та not in

if country in Capitals:
    print('Столиця країни ' + country + ': ' + Capitals[country])

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

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

    A[key] = value

  • Для видалення елемента зі словника можна використати операцію del A[key]

    (виникне помилка KeyError, якщо такого ключа у словнику немає)


Приклад 3. Безпечний спосіб видалення

Попередньо перевіряємо наявність елемента за допомогою in

A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key]

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

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

A = dict(zip('abcdef', list(range(6)))) for key in A: print(key, A[key])
a 0
b 1
c 2
d 3
e 4
f 5

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

  • A.keys() повертає список ключів усіх елементів

  • A.values() повертає список усіх значень елементів

  • A.items() повертає список усіх пар (кортежів) із ключів та значень


Приклад 5. Перебір елементів словника-2

За допомогою методу словника items

A = dict(zip('abcdef', list(range(6)))) for key, value in A.items(): print(key, value)
a 0
b 1
c 2
d 3
e 4
f 5

3. Множини


Множини в Python

  • Множини у мові Python (set) можуть складатися тільки з різних елементів, порядок елементів у множині невизначений

  • Виконувати операції можна як над множинами, так і з окремими елементами


Порядок зберігання елементів

  • На відміну від списків, де елементи зберігаються у вигляді послідовного списку, у множинах порядок зберігання елементів невизначений (більше того, елементи множини зберігаються не поспіль, як у списку, а за допомогою хитрих алгоритмів)

  • Це дозволяє виконувати операції типу "перевірити приналежність елемента множині" швидше, ніж просто перебираючи всі елементи множини


Елементи множин

  • Елементами множини може бути будь-який незмінний тип даних:
    • числа
    • рядки
    • кортежі (незмінні списки)
  • Типи даних, що змінюються, не можуть бути елементами множини (список або інша множина)

Створення множин

  • Множина задається перерахуванням всіх її елементів у фігурних дужках
  • Винятком є порожня множина, яку можна створити за допомогою функції set()
  • Якщо функції set передати як параметр список, рядок чи кортеж, вона поверне множину, що складається з елементів цієї послідовності

Приклад 6

a = {1, 2, 3} print(a) b = set('qwerty') print(b)
{1, 2, 3}
{'e', 'q', 'r', 't', 'w', 'y'}

Приклад 7

Кожен елемент може входити до множини лише один раз, порядок надання елементів неважливий

a = {1, 2, 3} b = {3, 2, 3, 1} print(a == b) # виведе True, тому що a і b — рівні (однакові) множини print(set('Hello')) # виведе {'H', 'e', 'l', 'o'}

Робота з елементами множини

  • Дізнатися кількість елементів у множинах можна за допомогою функції len

  • Перебрати всі елементи множини (у невизначеному порядку!) можна за допомогою циклу for:

    ​​​​primes = {2, 3, 5, 7, 11} ​​​​for number in primes: ​​​​ print(number)

Перевірка приналежності

  • Перевірити, чи належить елемент множині можна за допомогою операції in, що повертає значення True або False

  • Аналогічно є протилежна операція not in

    ​​​​a = {1, 2, 3} ​​​​print(1 in a, 4 not in a) ​​​​# True, True

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

  • Для додавання елемента метод add
  • Для видалення елементів є два методи: discard та remove. Якщо елемент, що видаляється, відсутній - discard не робить нічого, а remove генерує помилку
    ​​​​a = {1, 2, 3} ​​​​a.add(4) ​​​​a.remove(3) ​​​​print(a) # {1, 2, 4}
  • Метод pop видаляє один випадковий елемент та повертає його значення

Операції з множинами

Операція Опис
A | B Повертає множину, що є об'єднанням множин A і B
A & B Повертає множину, що є перетином множин A і B
A - B Повертає різницю множин A і B (елементи, що входять в A, але не входять в B)

Операції порівняння

Операція Опис
A == B
(A != B)
Повертає True, якщо множини A та B містять однакові елементи
A <= B Повертає True, якщо всі елементи множини A входять до B
A < B Те саме, що й A <= B and A != B

Домашнє завдання

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

© Яценко Р.М., НЦКТ "Кит", 2019-2023

Select a repo