Непоследовательное поведение между dict.items и dict.values
Замечания: примеры кода в python3, но вопрос стоит и о python2 (замена.keys
с.viewkeys
, так далее)
dict
объекты предоставляют методы представления, которые (иногда) поддерживают операции над множествами:
>>> {'a': 0, 'b': 1}.keys() & {'a'}
{'a'}
>>> {'a': 0, 'b': 1}.items() & {('a', 0)}
{('a', 0)}
Но представление значений не поддерживает операторы множеств:
>>> {'a': 0, 'b': 1}.values() & {0}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'dict_values' and 'set'
Я понимаю, что значение dict может быть не хэшируемым объектом, поэтому не всегда возможно создать набор значений, однако то же самое верно дляdict.items
, а такжездесь набор операций только сбой во время выполнения для.items
как только в диктате есть неописуемый типтогда как заданная операция для.values
терпит неудачу сразу.
В документах упоминается, чтоПредставления значений не считаются подобными множеству, поскольку записи, как правило, не являются уникальными, но это, кажется, не является убедительной причиной - например, python не мешает вам создавать набор букв типа{0, 0, 1, 2}
.
Какова реальная причина такого несоответствия в поведении?