Бажаєте освоїти роботу зі словниками в Python? Ця інструкція детально розгляне методи словників Python, необхідні для читання, модифікації та інших типових операцій зі словниками.
Ми почнемо з короткого огляду основних концепцій словників Python, а потім створимо приклад словника і навчимося його змінювати за допомогою різних методів.
Отже, розпочнемо…
Огляд структури словників у Python
Словники – це вбудовані структури даних, які надає Python. Вони дозволяють зберігати елементи у вигляді пар “ключ-значення”, створюючи асоціації або відповідності між цими ключами та значеннями.
Ключі в словнику повинні бути унікальними, щоб їх можна було використовувати для хешування. Ви можете використовувати ключ для пошуку відповідного значення, або застосовувати вбудовані методи, про які ви дізнаєтеся далі.
Під час створення словника в Python, ви можете одразу ініціалізувати його усіма парами “ключ-значення”, або створити порожній словник і потім поступово додавати до нього необхідні елементи.
>>> dict1 = {'language':'Python','like':True} >>> type(dict1) <class 'dict'> # Або можна зробити так: >>> dict1 = {} >>> dict1['language']='Python' >>> dict1['like']=True
Методи словників Python для типових операцій
Зауваження: Щоб відтворити приклади коду, переконайтеся, що у вас встановлено Python версії 3.7 або новішої.
Ви можете виконувати код у Python REPL, або використовувати онлайн-редактор Python від techukraine.net.
>>> person = {'name':'Alice', ... 'city':'Portland', ... 'interest':'Programming', ... 'profession':'Developer' ... }
Тепер, коли ми ініціалізували словник Python, почнемо вивчати його різноманітні методи.
Отримання ключів словника за допомогою методу keys()
Одна з поширених задач при роботі зі словником Python – отримання всіх ключів, значень або пар “ключ-значення”. Для отримання всіх ключів словника, можна викликати метод keys(), як це показано нижче:
>>> person.keys() dict_keys(['name', 'city', 'interest', 'profession'])
Отримання значень словника за допомогою методу values()
Метод values() повертає всі значення словника і є корисним, коли вам потрібно їх додатково обробити.
Давайте отримаємо доступ до всіх значень у словнику особи:
>>> person.values() dict_values(['Alice', 'Portland', 'Programming', 'Developer'])
Отримання пар “ключ-значення” за допомогою методу items()
Метод items() повертає список кортежів, де кожен кортеж містить пару “ключ-значення”. Виклик цього методу для словника person поверне такий список:
>>> person.items() dict_items([('name', 'Alice'), ('city', 'Portland'), ('interest', 'Programming'), ('profession', 'Developer')])
Створення поверхневої копії словника за допомогою методу copy()
Метод copy() створює поверхневу копію словника Python.
>>> person_cpy = person.copy()
Тут person_cpy є поверхневою копією словника person. Давайте змінимо цю копію, оновивши значення ключа ‘name’ на ‘Bob’.
>>> person_cpy['name'] = 'Bob' >>> person_cpy
Тепер, переглянувши вміст копії словника, ви побачите, що значення ‘name’ було змінено на ‘Bob’.
{ 'name': 'Bob', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer' }
Проте, оригінальний словник person не було змінено.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer' }
Встановлення значень за замовчуванням за допомогою методу setdefault()
При роботі зі словниками Python, часто може виникнути виключення KeyError, якщо ключ відсутній у словнику. Ось приклад, коли ми намагаємося отримати доступ до значення ключа ‘age’:
>>> person['age'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'age'
Ви можете запобігти таким помилкам, використовуючи вбудовані методи setdefault() та get() замість прямого доступу до значення, як це показано вище.
Метод setdefault(key) повертає значення dict[‘key’], якщо ключ присутній у словнику.
>>> person.setdefault('name') 'Alice'
Якщо ключ відсутній, він додає цей ключ до словника зі значенням за замовчуванням None.
>>> person.setdefault('address') >>> person
Тут ключ ‘address’ відсутній у словнику person. Але ми бачимо, що його було додано зі значенням за замовчуванням None.
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': None }
Тепер ми можемо встановити значення ключа ‘address’ на певну адресу:
>>> person['address'] = "10, xyz street"
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street' }
Ви також можете вказати значення у виклику методу, наприклад:
>>> person.setdefault('country','USA') 'USA' >>> person
Оскільки ключ ‘country’ спочатку був відсутній у словнику person, ми бачимо, що його було додано зі значенням ‘USA’.
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
Отримання конкретного значення за допомогою методу get()
Метод get() повертає значення, що відповідає заданому ключу. Він також може приймати необов’язкове значення за замовчуванням, яке повертається, якщо ключ не знайдено в словнику.
Коли ми намагаємося отримати значення ключа ‘name’, ми отримуємо ‘Alice’, оскільки цей ключ присутній у словнику person:
>>> person.get('name') 'Alice'
У словнику person немає ключа ‘gpa’. Тому, коли ми намагаємося отримати його значення, ми нічого не отримуємо в Python REPL. Однак, якщо ви виведете значення за допомогою print(), ви отримаєте None.
>>> person.get('gpa') >>> print(person.get('gpa')) None
Але, якщо ви вкажете необов’язкове значення за замовчуванням, ми отримаємо це значення замість None.
>>> person.get('gpa','not found') 'not found'
Проте метод get() не додає ключ ‘gpa’ до словника.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
Розрізнення між методами setdefault() та get()
Хоча методи setdefault() та get() можна використовувати для обробки KeyError, давайте підсумуємо їх відмінності на основі того, що ми дізналися:
- dict.setdefault(key,val) додає ключ зі значенням за замовчуванням val. Якщо val не вказано, ключ додається зі значенням за замовчуванням None.
- dict.get(key,val) повертає значення, що відповідає ключу зі словника Python. Якщо ключ відсутній, повертається значення val (якщо його надано), або None, але ключ не додається до словника.
Ви також можете використовувати defaultdict у Python для покращеної обробки помилок KeyError.
Оновлення вмісту словника за допомогою методу update()
Ви можете оновити існуючий словник Python, використовуючи пари “ключ-значення” з іншого словника. Ви також можете оновити вміст словника за допомогою ітерованого об’єкта Python та методу update().
Давайте визначимо словник more_details. Потім ми оновимо словник person, додавши вміст з more_details:
>>> more_details = {'hobby':'singing', 'likes':'sweets'} >>> person.update(more_details)
З наведених нижче результатів ми бачимо, що ключі ‘hobby’ та ‘likes’ були додані до словника person.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA', 'hobby': 'singing', 'likes': 'sweets' }
Видалення останнього доданого елемента за допомогою методу popitem()
Метод словника popitem() використовується для видалення останньої доданої пари “ключ-значення”.
>>> person.popitem() ('likes', 'sweets')
Як видно, виклик методу popitem() для словника user повертає пару “ключ-значення” (‘likes’, ‘sweets’) – останній доданий елемент у словник.
Він також видаляє цю пару “ключ-значення”. У цьому можна переконатися, переглянувши вміст словника:
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA', 'hobby': 'singing' }
Видалення елемента словника за допомогою методу pop()
Ми знаємо, що метод словника popitem() видаляє і повертає останню пару “ключ-значення” у словнику Python. Однак іноді нам потрібно видалити інші елементи, не лише останню додану пару.
Для цього ми можемо використовувати метод словника Python pop(): виклик .pop(key) повертає значення, що відповідає ключу, а також видаляє пару “ключ-значення” зі словника.
Ось приклад:
>>> person.pop('hobby') 'singing'
Коли ми витягли елемент, що відповідає ключу ‘hobby’, ми побачили, що його більше немає у словнику.
>>> person
{ 'name': 'Alice', 'city': 'Portland', 'interest': 'Programming', 'profession': 'Developer', 'address': '10, xyz street', 'country': 'USA' }
Якщо ми передаємо ключ, якого не існує, виникає виключення KeyError, як показано нижче:
>>> person.pop('age') Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'age'
Тут виникає виключення KeyError, оскільки ключ ‘age’ відсутній у словнику person.
На відміну від методу pop() для списку, який за замовчуванням видаляє останній елемент, метод pop() для словника вимагає наявність ключа. Якщо ви не вкажете ключ у методі, виникне помилка.
>>> person.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: pop expected at least 1 argument, got 0
Видалення всіх елементів словника за допомогою методу clear()
Методи словника pop() та popitem() видаляють одну пару “ключ-значення” за один раз. Якщо ви хочете видалити усі елементи зі словника, можна скористатися методом clear().
>>> person.clear() >>> person {}
Як бачимо, виклик методу clear() для словника person видаляє усі пари “ключ-значення”, і словник person тепер порожній.
Короткий підсумок методів словника Python
Ось короткий огляд методів словника Python, які ми вивчили.
Метод | Синтаксис | Опис |
keys() | dict1.keys() | Повертає ключі dict1 |
values() | dict1.values() | Повертає значення dict1 |
items() | dict1.items() | Повертає список усіх пар “ключ-значення” у dict1 |
copy() | dict1.copy() | Повертає поверхневу копію dict1 |
setdefault() | dict1.setdefault(key, default_value) | – Додає ключ з необов’язковим default_value як ключ до dict1 (якщо не вказано, значенням за замовчуванням є None) – Повертає dict1[key] якщо ключ вже присутній |
get() | dict1.get(key,default_value) | – Повертає dict1[key] якщо ключ присутній у dict1; Інакше повертає default_value – Якщо ключ відсутній у dict1 і default_value не вказано, повертає None |
update() | dict1.update(iterable1) | Оновлює dict1 парами “ключ-значення” з iterable1 |
popitem() | dict1.popitem() | Видаляє та повертає останню пару “ключ-значення” з dict1 |
pop() | dict1.pop(key) | – Вилучає та повертає значення, що відповідає ключу: dict1[key] – Викликає KeyError, якщо ключ відсутній у dict1 |
clear() | dict1.clear() | Видаляє усі елементи з dict1 |
Висновок
Ви навчилися використовувати поширені методи для виконання операцій читання, оновлення та видалення словників Python. Крім того, ви дізналися, як методи get() та setdefault() можна використовувати для обробки винятків KeyError, повертаючи значення за замовчуванням або додаючи запис зі значенням за замовчуванням до словника Python. Також можливо сортувати словник Python за ключем або значенням.
Далі ознайомтеся зі списком корисних методів списку Python. Вдалого вам кодування!