Сообщить об ошибке.

Представления словарей dict.keys, dict.values и dict.items в Python

Динамически изменяемые представления словарей Python

Объекты, возвращаемые методами словарей dict.keys(), dict.values() и dict.items() являются объектами-представлениями (view). Они обеспечивают динамическое представление записей словаря. Другими словами, при изменении словаря dict соответствующие представление будет отражать эти изменения.

Порядок ключей dict.keys() и значений dict.values() словаря гарантированно являются порядком вставки в словарь. Это позволяет создавать такие пары как (value, key):

# С помощью функции `zip()`
pairs = zip(d.values(), d.keys())

# С помощью выражения списка
pairs = [(v, k) for (k, v) in d.items()]

Представления словаря могут быть использованы для перебора в цикле для получения соответствующих значений и проверки на вхождение/принадлежность элементов к представлению.

Представления словарей поддерживают операции:

len(dictview):

Функция len(dictview) вернет количество записей в словаре.

iter(dictview):

Функция iter(dictview) возвращает итератор по ключам dict.keys(), значениям dict.values() или элементам dict.items(). В последнем случае представление будет в виде списка кортежей (key, value).

Итераторы представлений при добавлении или удалении записей в словаре могут вызвать ошибку RuntimeError или не выполнить итерацию по всем записям.

x in dictview:

Операция x in dictview вернет, True если значение элемента x присутствует в представлении ключей, значений или элементов словаря. В последнем случае x должен быть кортежем (key, value).

reversed(dictview):

Функция reversed(dictview) вернет обратный итератор по ключам, значениям или элементам словаря. Представление будет повторяться в обратном порядке вставки.

dictview.mapping

Атрибут представления словаря dictview.mapping возвращает types.MappingProxyType, который обертывает исходный словарь, на который ссылается представление.

Новое в версии 3.10

Представления dict.keys() и dict.items() поддерживает операции, доступные для множеств set
Последовательности ключей dict.keys() похожи на множества set, так как их записи уникальны и хешированы. Если значения dict.keys() являются хешируемыми, то и парные кортежи (key, value), получаемые в результате метода dict.items(), являются уникальными и хешируемыми.

Примеры использования:

>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
# представление ключей словаря
>>> keys = dishes.keys()
# представление значений словаря
>>> values = dishes.values()

>>> n = 0
>>> for val in values:
...     n += val
>>> print(n)
# 504

# динамическое представление записей словаря
>>> del dishes['eggs']
>>> del dishes['sausage']
>>> list(keys)
# ['bacon', 'spam']

# Операции над словарем, поддерживаемые множествами set
>>> keys & {'eggs', 'bacon', 'salad'}
# {'bacon'}
>>> keys ^ {'sausage', 'juice'}
# {'juice', 'sausage', 'bacon', 'spam'}

# представление значений словаря
>>> values
# dict_values([1, 500])

# пример `dictview.mapping`
# возвращаем прокси (только для чтения) 
# для исходного словаря
>>> values.mapping
# mappingproxy({'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500})
>>> values.mapping['spam']
# 500