Объекты, возвращаемые методами словарей 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