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

使用不同的顺序按多个键排序

巫马浩言
2023-03-14
问题内容

在Python 3中,使用多个键按字典顺序对html" target="_blank">对象列表进行排序非常容易。例如:

items.sort(key = lambda obj: obj.firstname, obj.lastname)

reverse参数使您可以指定是升序还是降序。但是,如果要按多个键进行排序,但是要对第一个键使用降序排序,而对第二个键使用升序排序,该怎么办?

例如,假设我们有一个具有两个属性的对象,pointsname,其中pointsanintnameis是str。我们希望通过梳理这些对象的名单points
递减 顺序(使之与点的数量最多的对象是第一位的),但与同等数量的对象points,我们要排序这些由name字母( 升序 )的顺序。

如何做到这一点?


问题答案:

没有内置的方法来处理此问题。对于一般情况,您必须进行两次排序:首先通过次要排序,然后再通过主要排序。正如@Mark
Ransom在其评论中提到的,在许多情况下,变量是数字的,因此您可以使用负值来翻转顺序。

如果您知道要排序的变量的类型以及如何使用它,则还可以编写一个键函数,该键函数返回递增值的递减值。有关字符串的示例,请参见此线程。(基本上,您采用字符的ASCII数值的负数。)

在Python 2中,您也可以使用cmp函数代替键,但这可能会使排序变慢。是否使它变慢取决于列表的大小和未排序。在Python
3中,该cmp参数消失了,但是正如@Mark Ransom所指出的,您可以使用cmp_to_key



 类似资料:
  • 比如说,我有一张这样的桌子: 我想按列的升序排序,但在此范围内,我想按列的降序排序,如下所示: 我曾尝试使用orderBy(“A”,desc(“B”),但它给出了一个错误。 我应该如何在Spark 2.0中使用dataframe编写查询?

  • 我有一个算法包含以下情况;我想知道是否有可能有所改进(我认为不可能,但我可能错了)。 我有一个对象列表。我有两个不同的(独立的)键来对它们进行排序:和。实际上,我可以在算法开始时以两种方式对列表进行排序,而无需花费大量成本;因此,我有两份清单: (Python语法,但我认为任何人都能理解)。在这个阶段,只要复杂性保持在O(nlogn)以下,我完全可以做更多的事情(初始化新变量)。 我需要提取的许多

  • 问题内容: 我有可能需要按1-n键排序的大文件。其中一些键可能是数字键,有些则可能不是数字键。这是一个固定宽度的柱状文件,因此没有定界符。 有没有一种很好的方法可以用Unix排序呢?使用一个键,就像使用“ -n”一样简单。我已经阅读了手册页并简短地搜索了Google,但是没有找到一个很好的例子。我将如何实现这一目标? 注意:由于文件大小可能,我排除了Perl。这将是不得已的办法。 问题答案: 使用

  • 这个问题是在电子艺术采访中提出的。 有三条线。第一个线程打印1到10个数字。第二个线程打印从11到20的数字。第三条线从21到30。现在这三个线程都在运行。然而,数字是按不规则的顺序打印的,如1、11、2、21、12等。 如果我想让数字按排序顺序打印,比如1,2。。。我该怎么处理这些线呢?

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

  • 在ElasticSearch中为多个字段指定排序顺序的最佳方法是什么?查询字符串格式似乎根本不起作用: 人们希望先按字段1排序,然后按字段2排序,但似乎只有一个字段排序正确。完整的符号效果更好,但第一个条目偶尔会出现错误的搜索顺序: