103

我本来希望 Python 的 keys 方法返回一个集合而不是一个列表。因为它最类似于 hashmap 的键所提供的保证。具体来说,它们是唯一的并且没有排序,就像一个集合。但是,此方法返回一个列表:

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

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

4

2 回答 2

117

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

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

对于类似集合的视图,为抽象基类定义的所有操作collections.abc.Set都可用(例如,==<^)。

于 2012-12-14T20:58:45.130 回答
1

因为订购是有保证的。

在 Python 3.7.0中,dict 对象的插入顺序保存特性已被声明为 Python 语言规范的官方部分。因此,您可以依赖它。

在 Python 3.6 中,如果你使用 cpython,它是有序的。

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

于 2021-03-04T20:35:45.940 回答