Sorted 方法在 3.x python 中的工作方式与 2.x 不同

Nis*_*ngh 0 python python-3.x

我正在尝试测试以下内容:

在 Python 2.x 中,排序工作正常:

>>> sorted([{'callme': 'voyaps-ai-job', 'breakme': 'folld-qy'}, {'callme': 'mixerjui', 'breakme': 'folld-ry'}, {'callme': 'voyaps-ml-jobs', 'breakme': 'folld-uy'}])
[{'breakme': 'folld-qy', 'callme': 'voyaps-ai-job'}, {'breakme': 'folld-ry', 'callme': 'mixerjui'}, {'breakme': 'folld-uy', 'callme': 'voyaps-ml-jobs'}]
Run Code Online (Sandbox Code Playgroud)

在 3.X 这打破了

>>> sorted([{'callme': 'voyaps-ai-job', 'breakme': 'folld-qy'}, {'callme': 'mixerjui', 'breakme': 'folld-ry'}, {'callme': 'voyaps-ml-jobs', 'breakme': 'folld-uy'}])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'dict' and 'dict'
Run Code Online (Sandbox Code Playgroud)

即我不能调用排序这种数据。我该怎么做才能做到这一点?

Rem*_*ich 5

<在两个字典上使用没有任何实际意义。Python 2 不在乎,它只是猜测了一些东西(按内存地址排序),Python 3 更严格。

您必须指定排序字典的含义。什么时候字典应该排在另一个之前?

如果您希望它依赖于例如“callme”键的值,那么您可以这样做

sorted([{'callme': 'voyaps-ai-job', 'breakme': 'folld-qy'}, {'callme': 'mixerjui', 'breakme': 'folld-ry'}, {'callme': 'voyaps-ml-jobs', 'breakme': 'folld-uy'}],
      key=lambda d: d['callme'])
Run Code Online (Sandbox Code Playgroud)