【问题标题】:Sorted method doesn't work the same way in 3.x python as of 2.x [duplicate]排序方法在 3.x python 中的工作方式与 2.x 不同 [重复]
【发布时间】:2019-02-06 09:53:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可以传递key 来表明您希望这些对象如何排序。
  • Python 3 字典有一些细微的差别,就像 Suraj 添加的链接一样。 Python 2 试图让所有东西都可以排序,Python 3 默认只支持对数字和字符串排序,否则你必须提供你希望排序工作的方式,比如sorted(mydict, key=lambda x:sorted(x.keys()))跨度>

标签: python python-3.x


【解决方案1】:

在两个字典上使用&lt; 没有实际意义。 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'])

【讨论】:

    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多