为什么Python的dict.keys()返回列表而不是集合?


86

我期望Python的keys方法返回一个集合而不是一个列表。因为它最类似于哈希映射键将提供的保证类型。具体来说,它们是唯一的而不是像集合一样排序的。但是,此方法返回一个列表:

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

这仅仅是Python API中的错误,还是我缺少其他原因?


1
Python 3不再是这种情况。docs.python.org
Boris

Answers:


98

原因之一是dict.keys()在语言引入集合之前。

请注意,dict.keys()Python 3中的的返回类型已更改:函数现在返回的是“类似集合”的视图,而不是列表。

对于组样的观点,都为抽象基类中定义的操作的collections.abc.Set是可用的(例如,==<,或^)。


6
它是一个视图,而不是列表/集合/等。因为很少需要复制所有密钥。

31
这些视图可以作为set()!允许dict.keys() | set()操作。Py3岩石:)
yota 2015年

2
如果您对Py2感到困惑,则可以通过调用dict.viewkeys()并将其与set操作一起使用来进行相同操作|&...
Tobia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.