Reputation: 40291
I would've expected Python's keys method to return a set instead of a list. Since it most closely resembles the kind of guarantees that keys of a hashmap would give. Specifically, they are unique and not sorted, like a set. However, this method returns a list:
>>> d = {}
>>> d.keys().__class__
<type 'list'>
Is this just a mistake in the Python API or is there some other reason I am missing?
Upvotes: 122
Views: 97533
Reputation: 12915
In python 2, it's less efficient to construct a set than a list.
Don't want to make an assumption that the user of the return value will want to search within the result. Iteration is also likely.
In python 3, it's no longer a list. It's an ordered iterable because ordering is guaranteed.
Upvotes: 2
Reputation: 500663
One reason is that dict.keys()
predates the introduction of sets into the language.
Note that the return type of dict.keys()
has changed in Python 3: the function now returns a "set-like" view rather than a list.
For set-like views, all of the operations defined for the abstract base class
collections.abc.Set
are available (for example,==
,<
, or^
).
Upvotes: 138