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

为什么Python';s dict.keys()返回列表而不是集合?,python,python-2.x,Python,Python 2.x,我希望Python的keys方法返回一个集合而不是一个列表。因为它最像hashmap的键提供的那种保证。具体来说,它们是唯一的,不像集合那样排序。但是,此方法返回一个列表: >>> d = {} >>> d.keys().__class__ <type 'list'> >d={} >>>d.键()。\u类__ 这只是Python API中的一个错误,还是我遗漏了其他一些原因?一个原因是dict.keys()早于将集合引入该语言 请注意,dict

我希望Python的keys方法返回一个集合而不是一个列表。因为它最像hashmap的键提供的那种保证。具体来说,它们是唯一的,不像集合那样排序。但是,此方法返回一个列表:

>>> d = {}
>>> d.keys().__class__
<type 'list'>
>d={}
>>>d.键()。\u类__

这只是Python API中的一个错误,还是我遗漏了其他一些原因?

一个原因是
dict.keys()
早于将集合引入该语言

请注意,
dict.keys()
的返回类型在Python3中已经改变:该函数现在返回一个“set like”,而不是一个列表


对于类似集合的视图,为抽象基类
collections.abc.set
定义的所有操作都可用(例如,
=
,因为顺序是有保证的

在Python中,dict对象的插入顺序保留性质已被声明为Python语言规范的正式部分。因此,您可以依赖它

在Python3.6中,如果使用cpython,它是有序的

在早期版本中,可能每个人都希望3.7


中,它是一个视图,而不是一个列表/集合/等等。因为几乎不需要复制所有键。这些视图可以作为一个
set()
!允许
dict.keys()| set()
操作。Py3:rocks:)进行处理。如果您坚持使用Py2,您可以通过调用
dict.viewkeys()来执行相同的操作
并将其与set操作一起使用
|
&
…请注意,使用Python3仍然无法执行
set.union(dict.keys(),set())
。然而,@yota所述的使用
|
的方法是有效的。Python 3中不再是这种情况。