字典在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
),等等。