Словники. Основні поняття. Характеристики. Створення словників. Доступ до значень у словнику
Зміст
- 1. Особливості словників. Переваги застосування
- 2. Відмінності між словниками та списками
- 3. Операції над словниками. Перелік
- 4. Особливості представлення ключів числовими типами
- 5. Які значення не можуть використовуватись в якості ключів?
- 6. Які існують способи створення словника?
- 7. Створення словника з допомогою оператора присвоювання =. Приклади
- 8. Створення словника з допомогою конструктора dict(). Приклад
- 9. Як здійснюється доступ до значення за його ключем?
- 10. Приклади уникнення помилок доступу за неіснуючим ключем
- 11. Приклади вкладених словників
- Зв’язані теми
Пошук на інших ресурсах:
1. Особливості словників. Переваги застосування
У мові Python є можливість використовувати словники. Словники – це вбудований тип даних, який є асоціативним масивом або хешем і базується на відображенні пар типу (ключ:значення).
Переваги застосування словників:
- з допомогою словників можна розробляти ефективні структури даних;
- для словників не потрібно писати вручну алгоритми пошуку даних, оскільки ці операції вже є реалізовані;
- словники можуть містити об’єднані дані у вигляді записів;
- словники ефективні при представленні розріджених структур даних.
Основні характеристики словників наступні:
- у словниках доступ до елементів виконується за ключем, а не за індексом. Словники визначають взаємозв’язок пар ключ-значення. За ключем відбувається доступ до значення. Якщо у словнику реалізовувати доступ до значення за індексом, то в цьому випадку індекс представляє собою ключ, а не зміщення відносно початку;
- словники представляють невпорядковані колекції довільних об’єктів. У словниках елементи (ключі) зберігаються у невизначеному порядку. Порядок формування елементів у словнику визначає інтерпретатор. Це необхідно для забезпечення більш швидкого пошуку.
- словники мають змінну довжину. Кількість елементів у словнику може збільшуватись або зменшуватись;
- гетерогенність – словники можуть містити об’єкти будь-яких типів;
- довільна кількість вкладень – словники мають можливість створення довільної кількості рівнів вкладень, оскільки словники можуть містити списки, інші словники тощо;
- словники відносяться до категорії змінюваних об’єктів. Тому, у словниках немає сенсу використовувати операції які мають фіксований порядок слідування елементів (наприклад, конкатенація);
- словники є таблицями посилань на об’єкти або хеш-таблицями і відносяться до об’єктів-відображень. Це означає, що у словниках об’єкти відображають (представляють) ключі на значення.
⇑
2. Відмінності між словниками та списками
Між словниками і списками існують наступні основні відмінності:
- списки є впорядкованими колекціями, словники не є впорядкованими колекціями;
- у списках елементи витягуються з допомогою зміщення, яке визначає позицію елементу в списку. У словниках елементи витягуються за допомогою ключа;
- на відміну від списків у словниках немає підтримки операцій над послідовностями (наприклад, конкатенація, витягування зрізу та інше);
- списки є масивами посилань на об’єкти. Словники є масивами невпорядкованих таблиць посилань на об’єкти, які підтримують доступ до об’єктів за ключем.
⇑
3. Операції над словниками. Перелік
У мові Python існує велика кількість операцій та методів для обробки словників. Усі ці засоби коротко перераховані тут:
- стандартний метод len() – визначає кількість елементів у списку;
- операція D[key] – доступ до елементу словника D за значенням ключа key;
- операція del – видалення елемента за ключем;
- операції in, not in – визначення наявності чи відсутності ключа у словнику;
- метод iter() – отримати ітератор за ключами словника;
- метод clear() – видалити всі елементи зі словника;
- метод copy() – вернути копію словника;
- метод dict.fromkeys() – створити новий словник з ключів та значень;
- метод get() – отримати значення за ключем;
- метод items() – вернути представлення елементів словника;
- метод keys() – отримати нове представлення ключів словника;
- метод pop() – видалення елементів зі словника з поверненням значення;
- метод popitem() – витягування зі словника довільної пари ключ:значення;
- метод setdefault() – встановити елемент за замовчуванням;
- метод update() – оновлення словника за заданим списком пар ключ:значення;
- метод values() – отримати список значень зі словника.
Більш детально використання вищеперерахованих операцій та методів можна вивчити в темах:
- Стандартні функції та операції обробки словників;
- Методи роботи зі словниками.
⇑
4. Особливості представлення ключів числовими типами
У словниках, в якості ключів можуть використовуватись числові типи: цілі або дійсні (з плаваючою комою). У випадку представлення ключів числовими типами можна виділити такі особливості:
- при пошуку потрібного значення за ключем використовується проста операція порівняння. Якщо в якості ключа вказувати значення різних числових типів, наприклад 1 і 1.0, то такі значення вважаються взаємозамінними (звертаються до одного й того самого елементу словника);
- представлення ключа числовим типом з плаваючою комою не рекомендується, оскільки значення цих типів є наближеними. Якщо в якості ключа потрібно вказати числовий тип, то для цього доцільно використовувати цілі числові типи.
⇑
5. Які значення не можуть використовуватись в якості ключів?
В якості ключів не можна використовувати змінювані типи об’єктів. Наприклад, списки, словники та інші змінювані типи не можуть використовуватись в якості ключів. Однак, в якості значень ці змінювані типи можна використовувати.
⇑
6. Які існують способи створення словника?
У мові Python, щоб створити словник можна використати один з наступних способів:
- з допомогою оператора присвоювання = та фігурних дужок, в яких через кому розміщуються пари ключ:значення;
- з допомогою конструктора dict() класу dict.
⇑
7. Створення словника з допомогою оператора присвоювання =. Приклади
Словник можна створити зручним (природнім) способом з допомогою оператора присвоювання =.
# Створення словника # з допомогою оператора присвоювання # 1. Пустий словник A = {} print('A = ', A) # 2. Словник з елементів # 2.1. Містить цілочисельні ключі і рядки значень B = { 1:'Mon', 2:'Tue', 3:'Wed', 4:'Thu', 5:'Fri', 6:'Sat', 7:'Sun' } print('B = ', B) print('B[2] = ', B[2]) # B[2] = Tue # 2.2. Містить рядкові ключі і дійсні значення C = { 'Pi':3.1415, 'Exp':2.71 } print('C = ', C) print('C[Exp] = ', C['Exp']) # C[Exp] = 2.71 # 2.3. Словник, що містить набори значень D = { 'Table1':[ 1, 2, 4], 'Table2':[ 8, -2, 2.33] } print('D = ', D) print('D[Table1] = ', D['Table1']) # D[Table1] = [1, 2, 4] print('D[Table2] = ', D['Table2']) # D[Table2] = [8, -2, 2.33]
Результат виконання програми
A = {} B = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri', 6: 'Sat', 7: 'Sun'} B[2] = Tue C = {'Pi': 3.1415, 'Exp': 2.71} C[Exp] = 2.71 D = {'Table1': [1, 2, 4], 'Table2': [8, -2, 2.33]} D[Table1] = [1, 2, 4] D[Table2] = [8, -2, 2.33]
⇑
8. Створення словника з допомогою конструктора dict(). Приклад
Словник може бути створений з допомогою одного з конструкторів dict(), які реалізовані у класі dict. Згідно з документацією Python у класі dict використовується 3 конструктори, які мають наступну загальну форму
dict(**keyword_arg) dict(mapping, **keyword_arg) dict(iterable, **keyword_arg)
де
- keyword_arg – необов’язковий ключовий аргумент. Якщо конструктор викликається без ключового аргументу (наприклад, dict()), то створюється пустий словник. Якщо в конструкторі задається декілька ключових аргументів, то вони розділяються комою (у загальній формі конструктора використано символи **);
- mapping – відображуваний об’єкт, на основі якого будується словник;
- iterable – ітерований об’єкт, на основі якого будується словник.
В залежності від аргументів, інтерпретатор Python викликає відповідний конструктор. У всіх конструкторах перший об’єкт кожного елементу стає ключем, другий стає відповідним значенням.
У випадку, якщо ключ зустрічається більше одного разу, то приймається останнє значення, встановлене за цим ключем.
Приклад. Демонструється створення словників різними способами.
# Створення словника з допомогою конструктора dict # 1. Різновид конструктора dict(**keyword_arg) # 1.1. Створити пустий словник A = dict() print('A = ', A) # A = {} # 1.2. Створити список # {'Winter': 1, 'Spring': 2, 'Summer': 3, 'Autumn': 4} SEASONS = dict( Winter=1, Spring=2, Summer=3, Autumn=4) print('SEASONS = ', SEASONS) # --------------------------------------------------- # 2. Різновид конструктора dict(mapping, **keyword_arg) # 2.1. Застосування функції zip() DAYS = [ 1, 2, 3 ] DAYS_NAMES = [ 'Mon', 'Tue', 'Wed' ] DICT_DAYS = dict(zip(DAYS, DAYS_NAMES)) print(DICT_DAYS) # {1: 'Mon', 2: 'Tue', 3: 'Wed'} # 2.2. Застосування пар (key:value) DICT_DAYS = dict([(1,'Mon'), (2,'Tue'), (3,'Wed')]) print(DICT_DAYS) # {1: 'Mon', 2: 'Tue', 3: 'Wed'} # --------------------------------------------------- # 3. Різновид конструктора dict(iterable, **keyword_arg) # Застосування конструктора за зразком B = {} B = dict({1:'Mon', 2:'Tue', 3:'Wed'}) print('B = ', B) # B = {1: 'Mon', 2: 'Tue', 3: 'Wed'}
Результат виконання програми
A = {} SEASONS = {'Winter': 1, 'Spring': 2, 'Summer': 3, 'Autumn': 4} {1: 'Mon', 2: 'Tue', 3: 'Wed'} {1: 'Mon', 2: 'Tue', 3: 'Wed'} B = {1: 'Mon', 2: 'Tue', 3: 'Wed'}
⇑
9. Як здійснюється доступ до значення за його ключем?
У словнику, якщо відомо ключ, то доступ до значення за цим ключем можна отримати з допомогою операції []. В такий самий спосіб можна змінити значення, якщо відомо ключ, що відповідає цьому значенню.
Наприклад.
# Доступ до значення у словнику # 1. Створити список # {'Winter': 1, 'Spring': 2, 'Summer': 3, 'Autumn': 4} SEASONS = dict( Winter=1, Spring=2, Summer=3, Autumn=4) # 2. Вивести значення за ключем 'Spring' value = SEASONS['Spring'] # value = 2 # 3. Змінити значення у словнику за його ключем # Задано словник з номерами та назвами приміщень D = { 233:'Lecture hall', 234:'Laboratory' } # Зміна 'Laboratory' на 'Programming laboratory' D[234] = 'Programming laboratory'
⇑
10. Приклади уникнення помилок доступу за неіснуючим ключем
При роботі з словниками можлива ситуація, коли відбувається доступ за ключем, якого немає в словнику. У цьому випадку в програмі виникає помилка і генерується виключення KeyError.
Щоб уникнути помилки доступу за неіснуючим ключем можна використати один з трьох способів:
- попередньо перевірити наявність ключа з допомогою конструкції if;
- використати блок try-except для обробки виключення KeyError;
- використати метод get(), який, у випадку неіснуючого ключа, повертає значення за замовчуванням.
У нижченаведеному прикладі продемонстровано усі три способи.
Приклад.
# Словники. Уникнення доступу за неіснуючим ключем # Заданий словник Days = { 1:'Mon', 2:'Tue', 3:'Wed', 4:'Thu', 5:'Fri', 6:'Sat', 7:'Sun' } # 1. Спроба звернутись до неіснуючого дня # day = Days[8] # виникне виключення KeyError: 8 # 2. Спосіб 1. Звертання до неіснуючого дня, # використання оператора if day = int(input("Enter day: ")) if day in Days: print("day = ", Days[day]) else: print("1. Using if statement: Error.") # 3. Спосіб 2. Звертання до неіснуючого дня, # використання конструкції try-except try: print('day = ', Days[day]) except KeyError: print('2. Using try-except statement: Error.') # 4. Спосіб 3. Звертання до неіснуючого дня, # використання методу get() print('3. Using get() method: ', Days.get(day))
⇑
11. Приклади вкладених словників
В якості значень словники можуть містити інші вкладені словники. Наприклад:
# Вкладені словники # Приклад 1. # Внутрішній словник Worker_Type = { 'Manager':1, 'SupportStaff':2 } # Зовнішній словник # {'Worker': {'Manager': 1, 'SupportStaff': 2}} Worker_Dict = { 'Worker' : Worker_Type } print(Worker_Type) print(Worker_Dict) # Приклад 2. Figures = { 'Figure' : { 1:'Circle', 2:'Triangle', 3:'Rombus' } } print(Figures)
Результат виконання програми
{'Manager': 1, 'SupportStaff': 2} {'Worker': {'Manager': 1, 'SupportStaff': 2}} {'Figure': {1: 'Circle', 2: 'Triangle', 3: 'Rombus'}}
⇑
Зв’язані теми
⇑