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

2024-05-19 19:18:27 发布

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

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

在Python2.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'}]

在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'

也就是说,我不能对这种数据进行排序。我该怎么做才能做到这一点?你知道吗


Tags: 排序jobsjobmldictaisorteduy
1条回答
网友
1楼 · 发布于 2024-05-19 19:18:27

在两个字典上使用<是没有实际意义的。Python2并不在意,它只是猜测了一些东西(按内存地址排序),Python3更严格。你知道吗

您必须指定排序字典的含义。词典什么时候应该排在另一本之前?你知道吗

如果您希望它依赖于例如键“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'])

相关问题 更多 >