Pourquoi dict.keys () de Python renvoie-t-il une liste et non un ensemble?

87

Je me serais attendu à ce que la méthode des clés de Python renvoie un ensemble au lieu d'une liste. Comme cela ressemble le plus au genre de garanties que donneraient les clés d'un hashmap. Plus précisément, ils sont uniques et non triés, comme un ensemble. Cependant, cette méthode renvoie une liste:

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

Est-ce juste une erreur dans l'API Python ou y a-t-il une autre raison pour laquelle je manque?

soi-même
la source
1
Ce n'est plus le cas en Python 3. docs.python.org/3/library/stdtypes.html#dict-views
Boris

Réponses:

99

L'une des raisons est que cela dict.keys()précède l'introduction des ensembles dans la langue.

Notez que le type de retour dict.keys()a changé en Python 3: la fonction retourne maintenant un « set-like » vue plutôt que d' une liste.

Pour une installation semblable à vue, toutes les opérations définies pour la classe de base abstraite collections.abc.Setsont disponibles (par exemple, ==, <ou ^).

NPE
la source
6
Et c'est une vue au lieu d'une liste / ensemble / etc. car il est rarement nécessaire de copier toutes les clés.
31
et ces vues peuvent être traitées comme un set()! qui permettent des dict.keys() | set()opérations. Py3 rocks :)
yota
2
Si vous êtes coincé avec Py2, vous pouvez faire la même chose en l'appelant dict.viewkeys()et en l'utilisant avec des opérations définies |, &...
Tobia