为什么在python2中可以订购dict,但在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使用一个undocumented ordering,作为一个^{} 特殊方法实现。
排序只在有限的一组用例中才有意义,而且只存在于Python 2试图使所有都可以排序的情况下。
Python 3drastically cleaned up Python's ordering story;
.__cmp__()
已经不存在了,现在只有真正具有自然顺序的类型(如数字和字符串)才支持排序。对于其他一切,您需要显式地定义一个顺序。字典没有自然的顺序。如果您确实需要对字典进行排序,则需要定义一个对您的用例有意义的显式顺序。如果这意味着只比较键,那么就这样做(例如使用
key=sorted
)等你需要用一个
key
(documentation)来sort
。只有你知道你想要什么钥匙,但这里有一个例子:这是按键排序,其中带“最低”键的dict首先出现
编辑:正如Martijn Pieters指出的,this answer准确地描述了Python 2是如何做到的。但是您应该按照有意义的方式对您的情况进行排序,这可能与Python2的方式有根本的不同。
相关问题 更多 >
编程相关推荐