## ++Тема 13++<br>Словники та множини (c) Яценко Р.М., 2019-2023 [Навчальний центр комп'ютерних технологій "Кит"](http://kit.kh.ua/) <img src="https://i.imgur.com/Kh901c1.png" style="width: 150px; position: fixed; top: 10px; right: 10px; border: 0;"> --- ## 1. Призначення та створення словників ---- ### Визначення словника - Структура даних, що дозволяє ідентифікувати її елементи не за числовим індексом, а за довільним, називається _словником_ або _асоціативним масивом_ - Відповідна структура даних у мові Python називається `dict` ---- ### Приклад 1. Країни та столиці ```python= # Створимо порожній словник 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. Зберігання будь-яких даних, пов'язаних з об'єктом. Ключі -- об'єкти, значення -- пов'язані з ними дані ```python Days['January'] = 31 Days['February'] = 28 ... ``` ---- 3. Встановлення відповідності між об'єктами (наприклад, “батько-нащадок”). Ключ - об'єкт, значення - відповідний йому об'єкт 4. Якщо потрібен звичайний масив, але масимальне значення індексу елемента дуже велике, і при цьому будуть використовуватися не всі можливі індекси (так званий "розріджений масив"), то можна використовувати словник (асоціативний масив) для економії пам'яті ---- ### Приклад 2. Створення словника Порожній словник можна створити за допомогою функції `dict()` або порожньої пари фігурних дужок `{}` ```python= 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` ```python if country in Capitals: print('Столиця країни ' + country + ': ' + Capitals[country]) ``` ---- ### Додавання та видалення елемента - Для додавання нового елемента до словника потрібно просто надати йому якесь значення: `A[key] = value` - Для видалення елемента зі словника можна використати операцію `del A[key]` (виникне помилка `KeyError`, якщо такого ключа у словнику немає) ---- ### Приклад 3. Безпечний спосіб видалення Попередньо перевіряємо наявність елемента за допомогою `in` ```python= A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key] ``` ---- ### Приклад 4. Перебір елементів словника Можна легко організувати перебір ключів всіх елементів у словнику ```python= 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` ```python= 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. Множини <!-- [Множества](http://pythontutor.ru/lessons/sets/) --> ---- ### Множини в Python - Множини у мові Python (`set`) можуть складатися тільки з різних елементів, порядок елементів у множині невизначений - Виконувати операції можна як над множинами, так і з окремими елементами ---- ### Порядок зберігання елементів - На відміну від списків, де елементи зберігаються у вигляді послідовного списку, у множинах порядок зберігання елементів невизначений (більше того, елементи множини зберігаються не поспіль, як у списку, а за допомогою хитрих алгоритмів) - Це дозволяє виконувати операції типу "перевірити приналежність елемента множині" швидше, ніж просто перебираючи всі елементи множини ---- ### Елементи множин - Елементами множини може бути будь-який незмінний тип даних: - числа - рядки - кортежі (незмінні списки) - Типи даних, що змінюються, не можуть бути елементами множини (список або інша множина) ---- ### Створення множин - Множина задається перерахуванням всіх її елементів у фігурних дужках - Винятком є порожня множина, яку можна створити за допомогою функції set() - Якщо функції set передати як параметр список, рядок чи кортеж, вона поверне множину, що складається з елементів цієї послідовності ---- ### Приклад 6 ```python=1 a = {1, 2, 3} print(a) b = set('qwerty') print(b) ``` ``` {1, 2, 3} {'e', 'q', 'r', 't', 'w', 'y'} ``` ---- ### Приклад 7 Кожен елемент може входити до множини лише один раз, порядок надання елементів неважливий ```python=1 a = {1, 2, 3} b = {3, 2, 3, 1} print(a == b) # виведе True, тому що a і b — рівні (однакові) множини print(set('Hello')) # виведе {'H', 'e', 'l', 'o'} ``` ---- ### Робота з елементами множини - Дізнатися кількість елементів у множинах можна за допомогою функції len - Перебрати всі елементи множини (у&nbsp;невизначеному порядку!) можна за допомогою циклу for: ```python=1 primes = {2, 3, 5, 7, 11} for number in primes: print(number) ``` ---- ### Перевірка приналежності - Перевірити, чи належить елемент множині можна за допомогою операції `in`, що повертає значення `True` або `False` - Аналогічно є протилежна операція `not in` ```python=1 a = {1, 2, 3} print(1 in a, 4 not in a) # True, True ``` ---- ### Додавання та видалення елементів - Для додавання елемента -- метод `add` - Для видалення елементів є два методи: `discard` та `remove`. Якщо елемент, що видаляється, відсутній - `discard` не робить нічого, а `remove` генерує помилку ```python=1 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`<br>`(A != B)` | Повертає `True`, якщо множини `A` та `B` містять однакові елементи `A <= B` | Повертає `True`, якщо всі елементи множини `A` входять до `B` `A < B` | Те саме, що й `A <= B and A != B` --- ## Домашнє завдання Набрати та запустити на виконання усі приклади програм з лекції ![](https://i.imgur.com/gKDsna4.png) (c) Яценко Р.М., [НЦКТ "Кит"](http://kit.kh.ua/), 2019-2023
{"metaMigratedAt":"2023-06-17T23:13:24.933Z","metaMigratedFrom":"YAML","title":"Тема 13. Словники та множини","breaks":false,"slideOptions":"{\"allottedMinutes\":80,\"theme\":\"beige\",\"slideNumber\":\"c\",\"spotlight\":{\"enabled\":true}}","description":"© Яценко Р.М., 2019-2023","contributors":"[{\"id\":\"93a8c43f-1b5b-4461-9101-89b183ccbc1c\",\"add\":13213,\"del\":4197}]"}
    433 views