当前位置: 首页 > 面试题库 >

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

赏彭薄
2023-03-14
问题内容

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

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

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

之所以有效,是因为python的排序是稳定的。



 类似资料:
  • 问题内容: 我有一个元组列表,看起来像这样: 我想按元组内的整数值将此列表升序排序。可能吗? 问题答案: 尝试将key关键字与一起使用。 应该是一个标识如何从数据结构中检索可比较元素的函数。在你的情况下,它是元组的第二个元素,因此我们访问。 要进行优化,请参阅的响应,使用,它实际上是的更快版本]。

  • 问题内容: 我有一个带有数字值的字符串键数组,可用于具有每个标签出现次数的标签列表中,因此: 这是为了我可以按降序显示标签列表,因此: 我可以使用 arsort 通过出色的值进行反向排序,但是我还希望具有相同数字值的所有标签都按字母顺序排序,因此最终结果可以是: 有办法可以做到吗?我猜想 usort 可能是要走的路,但是我看了php.net上的示例,我的眼睛呆呆了!非常感谢!!! 问题答案: 看一

  • 问题内容: 在发现了惊人的发现之后,我再次陷入了困境。 问题是我有一个形式的字典,我需要按其整数值的降序对其进行排序, 但是 如果两个元素的值相同,则按键的升序排列。 一个使它更清楚的例子: 经过研究后,我得出以下结论: 这是因为它对值和键都进行了反向排序。我需要不撤消的钥匙。 问题答案: 就像是

  • 问题内容: 我目前正在创建一种排序方法,该方法由mysql查询的值组成。 这是数组的简要视图: 我已经成功地基于数字id值进行了正常的排序,但是我想按“国家/地区”字段的内容对数组进行排序(如果在这种情况下包含设置的字符串和国家/地区代码),然后通过id字段。 以下代码段是我的第一个想法,但我不知道如何将其合并到工作功能中: 你会怎么做? 谢谢! 不幸的是,我真的一无所获。 这是我目前拥有的东西,

  • 问题内容: 我有一个要排序的对象数组,每个对象都有两个参数:强度和名称 我想先按强度排序,然后再按字母顺序排序。我正在使用以下代码对第一个参数进行排序。然后如何排序? 谢谢你的帮助。 问题答案: 这样扩展您的排序功能; 一个和比较对字符串 是 字母比较。

  • 问题内容: 在主题函数返回的代码中迭代返回的映射时,键未按顺序显示。 我如何才能使键按顺序排列/对地图进行排序,以使键按顺序排列并且值对应? 这是代码。 问题答案: 在围棋博客:去映射在行动中有极好的说明。 当使用范围循环在地图上进行迭代时,未指定迭代顺序,并且不能保证每次迭代之间都相同。从Go 1开始,运行时间会随机化映射迭代顺序,因为程序员依赖于先前实现的稳定迭代顺序。如果需要稳定的迭代顺序,