在python 3中不可以订购dict?

2024-04-25 08:15:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 文件defaultmoststdinlinecalldictfeb
2条回答

Python 2使用一个undocumented ordering,作为一个^{}特殊方法实现。

排序只在有限的一组用例中才有意义,而且只存在于Python 2试图使所有都可以排序的情况下。

Python 3drastically cleaned up Python's ordering story.__cmp__()已经不存在了,现在只有真正具有自然顺序的类型(如数字和字符串)才支持排序。对于其他一切,您需要显式地定义一个顺序。

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

你需要用一个keydocumentation)来sort。只有你知道你想要什么钥匙,但这里有一个例子:

>>> dicts = [{'a':'a'},{'b':'b'}]
>>> sorted(dicts, key=lambda x:sorted(x.keys()))
[{'a': 'a'}, {'b': 'b'}]

这是按键排序,其中带“最低”键的dict首先出现


编辑:正如Martijn Pieters指出的,this answer准确地描述了Python 2是如何做到的。但是您应该按照有意义的方式对您的情况进行排序,这可能与Python2的方式有根本的不同。

相关问题 更多 >