Python. Словники. Основні поняття. Характеристики. Створення словників. Доступ до значень у словнику

Словники. Основні поняття. Характеристики. Створення словників. Доступ до значень у словнику


Зміст


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':1.71 }
print('C = ', C)
print('C[Exp] = ', C['Exp']) # C[Exp] =   1.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': 1.71}
C[Exp] = 1.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'}}

 


Зв’язані теми