Почему Python dict.keys () возвращает список, а не набор?

87

Я ожидал, что метод ключей Python вернет набор вместо списка. Так как это наиболее похоже на гарантии, которые дают ключи хэш-карты. В частности, они уникальны и не отсортированы, как набор. Однако этот метод возвращает список:

>>> d = {}
>>> d.keys().__class__
<type 'list'>

Это просто ошибка в Python API или есть еще одна причина, по которой я упускаю?

себя
источник
1
В Python 3 этого больше нет. Docs.python.org/3/library/stdtypes.html#dict-views
Борис

Ответы:

99

Одна из причин заключается в том, что они dict.keys()появились еще до введения в язык наборов.

Обратите внимание, что тип возвращаемого значения dict.keys()изменился в Python 3: функция теперь возвращает "наборное" представление, а не список.

Для множества подобных взглядов, все операции , определенные для абстрактного базового класса collections.abc.Setдоступны (например, ==, <или ^).

NPE
источник
6
И это представление вместо списка / набора / и т.д. потому что редко нужно копировать все ключи.
31
и эти просмотры можно обрабатывать как set()! которые позволяют dict.keys() | set()операции. Py3 Rocks :)
yota
2
Если вы застряли с py2, вы можете сделать то же самое по телефону dict.viewkeys()и использовать его с множеством операций |, &...
Тобия