Перейти до змісту

Відображення в 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 — перевірка існування ключа, значення або пари ключ-значення у словнику.
Back to top