Объекты, возвращаемые методами словарей dict.keys()
, dict.values()
и dict.items()
являются объектами-представлениями. Они обеспечивают динамическое представление записей словаря. Другими словами, при изменении словаря 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