© Яценко Р.М., 2019-2023
Навчальний центр комп'ютерних технологій "Кит"
Структура даних, що дозволяє ідентифікувати її елементи не за числовим індексом, а за довільним, називається словником або асоціативним масивом
Відповідна структура даних у мові Python називається dict
# Створимо порожній словник 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
Отже, кожен елемент словника складається з двох об'єктів:
Ключ ідентифікує елемент словника, значення є даними, які відповідають цьому ключу. Ключі – унікальні, двох однакових ключів у словнику бути не може
Вікіпедія. Ключем словника є слово-заголовок статті, а значенням — сама стаття. Щоб отримати доступ до статті, необхідно вказати слово-ключ
Контакти в телефоні. У цьому словнику ключем є ім'я, а значення номер телефону
Особливістю словника є його динамічність – до нього можна додавати нові елементи з довільними ключами і видаляти вже існуючі елементи
При цьому розмір пам'яті, що використовується, пропорційний розміру словника. Доступ до елементів словника виконується хоч і повільніше, ніж до звичайних списків, але загалом досить швидко
Підрахунок кількості якихось об'єктів. І тут потрібно завести словник, у якому ключами є об'єкти, а значеннями – їх кількість
Зберігання будь-яких даних, пов'язаних з об'єктом. Ключі – об'єкти, значення – пов'язані з ними дані
Days['January'] = 31
Days['February'] = 28
...
Встановлення відповідності між об'єктами (наприклад, “батько-нащадок”). Ключ - об'єкт, значення - відповідний йому об'єкт
Якщо потрібен звичайний масив, але масимальне значення індексу елемента дуже велике, і при цьому будуть використовуватися не всі можливі індекси (так званий "розріджений масив"), то можна використовувати словник (асоціативний масив) для економії пам'яті
Порожній словник можна створити за допомогою функції 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'}
Основна операція отримання значення елемента по ключу записується так само, як і для списків:
A[key]
Якщо елемента із заданим ключем немає у словнику, виникає помилка KeyError
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
, якщо такого ключа у словнику немає)
Попередньо перевіряємо наявність елемента за допомогою in
A = {'ab' : 'ba', 'aa' : 'aa', 'bb' : 'bb', 'ba' : 'ab'} key = 'ac' if key in A: del A[key]
Можна легко організувати перебір ключів всіх елементів у словнику
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()
повертає список усіх пар (кортежів) із ключів та значень
За допомогою методу словника 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
Множини у мові Python (set
) можуть складатися тільки з різних елементів, порядок елементів у множині невизначений
Виконувати операції можна як над множинами, так і з окремими елементами
На відміну від списків, де елементи зберігаються у вигляді послідовного списку, у множинах порядок зберігання елементів невизначений (більше того, елементи множини зберігаються не поспіль, як у списку, а за допомогою хитрих алгоритмів)
Це дозволяє виконувати операції типу "перевірити приналежність елемента множині" швидше, ніж просто перебираючи всі елементи множини
a = {1, 2, 3} print(a) b = set('qwerty') print(b)
{1, 2, 3}
{'e', 'q', 'r', 't', 'w', 'y'}
Кожен елемент може входити до множини лише один раз, порядок надання елементів неважливий
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