Por que o dict.keys () do Python retorna uma lista e não um conjunto?

87

Eu esperava que o método keys do Python retornasse um conjunto em vez de uma lista. Uma vez que é mais parecido com o tipo de garantia que as chaves de um hashmap dariam. Especificamente, eles são únicos e não classificados, como um conjunto. No entanto, este método retorna uma lista:

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

Isso é apenas um erro na API Python ou há algum outro motivo que estou perdendo?

a si mesmo
fonte
1
Este não é mais o caso em Python 3. docs.python.org/3/library/stdtypes.html#dict-views
Boris

Respostas:

99

Um dos motivos é que é dict.keys()anterior à introdução de conjuntos na linguagem.

Observe que o tipo de retorno de dict.keys()mudou no Python 3: a função agora retorna uma visualização "semelhante a um conjunto" em vez de uma lista.

Para conjunto semelhante a pontos de vista, todas as operações definidas para a classe base resumo collections.abc.Setestão disponíveis (por exemplo, ==, <, ou ^).

NPE
fonte
6
E é uma visão em vez de uma lista / conjunto / etc. porque raramente é necessário copiar todas as chaves.
31
e essas visualizações podem ser tratadas como um set()! que permitem dict.keys() | set()operações. Py3 rocks :)
yota,
2
Se você está preso ao Py2, pode fazer o mesmo chamando dict.viewkeys()e usando-o com operações de conjunto |, &...
Tobia