Відображення в Python
Відображення (mapping) – це об'єкт-контейнер, який підтримує довільний доступ до елементів по ключам.
Відображення мають реалізовувати наступні методи, які описано у абстрактному базовому класі
collections.Mapping
:
- get(key, default=None)
- items()
- keys()
- values()
Мутабельні відображення також мають підтримувати наступні методи, які описано у абстрактному базовому класі collections.MutableMapping
:
- clear()
- pop(key)
- popitem()
- setdefault(key, default=None)
- update()
Відображеннями є вбудований клас dict
, а також defaultdict
, OrderedDict
, Counter
з модуля collections
.
Словник
Вбудованим в Python класом відображення є dict
, який реалізує таку структуру даних, як словник.
Словник (dictionary, асоціативний масив) — невпорядкована мутабельна колекція пар "ключ-значення", яка підтримує довільний доступ до її елементів (значень) по відповідних ключах.
Ключами словників мають бути значення, що хешуються.
Зауважте, що числові ключі у словниках підпорядковуються правилам порівняння чисел. Таким чином,
int(1)
і float(1.0)
вважаються однаковими ключами. Однак через те, що значення типа
float
зберігаються в пам'яті наближенно, не рекомендується використовувати їх в якості ключів.
Способи створити об'єкт словника:
Перерахування пар ключ-значення:
d = {'John': 22, 'Jane': 18}
Словникові включення (вирази):
>>> people = ['John', 'Jane', 'Mary', 'Bob', 'Alice']
>>> d = {key:value for key, value in enumerate(people, start=1)}
>>> d
{1: 'John', 2: 'Jane', 3: 'Mary', 4: 'Bob', 5: 'Alice'}
>>>
Використовуючи конструктор класа:
# dict(**kwargs)
>>> d=dict(john=22, jane=18)
>>> d
{'john': 22, 'jane': 18}
>>>
# dict(mapping, **kwargs)
>>> d = dict({'key1':'value1'}, key2='value2')
>>> d
{'key1': 'value1', 'key2': 'value2'}
>>>
# dict(iterable, **kwargs)
>>> d = dict([(1,1),(2,2),(3,3)], key='value')
>>> d
{1: 1, 2: 2, 3: 3, 'key': 'value'}
>>>
Операції зі словниками та іншими відображеннями:
Операція | Опис |
---|---|
len(d) |
Кількість елементів |
d[key] |
Отримати значення по ключу key . Якщо такого ключа не існує і відображення реалізує спеціальний метод __missing__(self, key) , то викликається цей метод. Якщо ключа не існує і метод __missing__ не визначено — піднімається виняток KeyError |
d[key] = value |
Змінити значення або створити нову пару ключ-значення, якщо ключа не існує |
key in d , key not in d |
Перевірка наявності ключа у відображенні |
iter(d) |
Те ж саме, щоо iter(d.keys()) |
clear() |
Видалити усі елементи |
copy() |
Створити неповну копію |
dict.fromkeys(sequence[, value]) |
Створити новий словник з ключами з послідовності sequence і заданим значенням (за умовчанням – None ) |
d.get(key[, default]) |
Безпечно отримати значення по ключу (ніколи не піднімає KeyError ). Якщо ключа не знайдено, повертає default (за умовчанням None) |
d.items() |
Повертає об'єкт представлення словника dict_items , який відповідає парам ключ-значення |
d.keys() |
Повертає об'єкт представлення словника dict_keys , який відповідає ключам словника |
d.pop(key[, default]) |
Якщо ключ key існує — видаляє елемент зі словника і повертає його значення. Якщо ключа не існує і задане значення default — повертає це значення, інакше піднімається виняток KeyError |
d.popitem() |
Видаляє довільну пару ключ-значення і повертає її. Якщо словник порожній — піднімає виняток KeyError |
d.setdefault(key[, default]) |
Якщо ключ key існує — повертає відповідне значення. Інакше створює елемент з ключем key і значенням default (None за замовчуванням) |
d.update(mapping) |
Приймає або інший словник або відображення, або ітерабельний об'єкт, який складається з ітерабельних об'єктів — пар ключ-значення, або іменовані аргументи. Додає відповідні елементи у словник, перезаписуючи елементи з існуючими ключами |
d.values() |
Повертає об'єкт представлення dict_values який відповідає значенням |
Об'єкти представлення словника.
Об'єкти, які повертаються методами items()
, keys()
і values()
— це так звані об'єкти представлення словника. Вони надають динамічне представлення елементів словника, тобто зміни даного словника автоматично відображаються і на цих об'єктах.
Операції з представленнями словників:
iter(dictview)
— отримати ітератор по ключам, значенням або парам ключ-значення. Усі представлення словників при ітеруванні повертають елементи словника у однаковому порядку. При спробі змінити словник під час ітерування може виникнути винятокRuntimeError
.len(dictview)
— кількість елементів у словнику.x in dictview
— перевірка існування ключа, значення або пари ключ-значення у словнику.