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