Python 3中的字典不可排序吗?
为什么在Python2中字典是可以排序的,而在Python3中却不可以?我在文档里找不到相关信息。
Python 3.3.4 (default, Feb 11 2014, 16:14:21)
>>> sorted([{'a':'a'},{'b':'b'}])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: dict() < dict()
与此相比。
Python 2.7.6 (default, Feb 26 2014, 12:01:28)
>>> sorted([{'a':'a'},{'b':'b'}])
[{'a': 'a'}, {'b': 'b'}
2 个回答
10
Python 2使用了一种未公开的排序方式,这个排序是通过一个叫做.__cmp__()
的特殊方法来实现的。
这种排序方式只在一些特定的情况下有意义,而且之所以存在,是因为Python 2想要让几乎所有东西都可以排序。
而在Python 3中,对排序的处理进行了大幅度的简化;.__cmp__()
这个方法被去掉了,现在只有那些本身就有自然排序的类型(比如数字和字符串)才支持排序。对于其他类型,你需要自己明确地定义排序规则。
字典是没有自然排序的。如果你需要对字典进行排序,就必须定义一个适合你使用场景的明确排序方式。如果这意味着只比较键,那就这样做(例如,可以使用key=sorted
),等等。