字典在python 3中不可排序?


问题内容

为什么dict在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'}

问题答案:

Python
2使用未记录的ordering,它是作为一种.__cmp__()特殊方法实现的。

该排序仅在有限的用例集合中才有意义,并且仅存在是因为Python 2试图使 所有事物 都可排序。

Python
3彻底清除了Python的订购故事.__cmp__()现在已经不复存在了,只有真正具有自然顺序的类型(例如数字和字符串)现在才支持顺序。对于其他所有内容,您需要明确定义一个顺序。

字典没有自然顺序。如果确实需要对字典进行排序,则需要定义一个对您的用例有意义的显式顺序。如果这意味着仅比较键,则进行比较(例如使用key=sorted),等等。