python - 按第二个值对元组列表进行排序,reverse=True,然后按 key,reverse=False

标签 python sorting dictionary reverse

我需要首先对字典进行排序,值 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]))

由于您的“值”是数字,您可以通过更改符号轻松地反转排序顺序。

换句话说,这种排序按值(-x[1])(负号将大数字放在首位)排序,然后对于相同的数字,它根据排序键(x[0])。

如果您的值(value)观不能轻易被“否定”以将大项目放在首位,那么一个简单的解决方法是排序两次:

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

因为python的排序是稳定的。

关于python - 按第二个值对元组列表进行排序,reverse=True,然后按 key,reverse=False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14466068/

相关文章:

python - 将字符转换为 unicode

c - 如何在合并排序和插入排序之间进行选择?

c++ - 在 C++ 中共享键值对的最佳方式

python - 在python中将多个字典转换为单个字典

python - 从具有列表作为值的字典创建元组对

Python/MySQL查询错误: `Unknown column`

python - Python 中的文件处理 - Float > Str 错误

python - 使用不同数量的核心进行多处理时,将结果保存到磁盘会导致不同大小的对象

linux - 就地排序文件

r - 使用ggplot对同一图中的两个直方图进行排序