python:如何对元组列表进行二次排序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (88)

我需要先对字典排序,然后用reverse=True,对于重复的值,按键排序,reverse=False

到目前为止,我有这个

dict = [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
sorted(dict.items(), key=lambda x: (x[1],x[1]), reverse=True)

还会回来..。

[('B', 3), ('A', 2), ('J', 1), ('I', 1), ('A', 1)]

但我需要的是:

[('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]

当值相等时,我只能按指定的方式以递减的方式对键进行排序。

提问于
用户回答回答于

以下内容适用于您的输入:

d = [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
sorted(d,key=lambda x:(-x[1],x[0]))

方法:

from operator import itemgetter
d.sort(key=itemgetter(0))
d.sort(key=itemgetter(1),reverse=True)

因为python内置的排序是稳定的。

用户回答回答于
In [4]: l = [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]

In [5]: sorted(l, key=lambda (x,y):(-y,x))
Out[5]: [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]

扫码关注云+社区

领取腾讯云代金券