Python按多个标准排序

时间:2013-11-22 13:15:28

标签: python sorting

我有一个列表,其中每个元素的格式为[list of integers, integer]。 例如,列表的元素可能看起来像[[1,3,1,2], -1]

我想按以下标准对包含所述元素类型的列表进行排序:

  1. 如果两个元素(即element[0])的整数列表长度不同,则整数列表较小的元素较小。

  2. 否则,如果整数列表具有相同的长度,则较小的元素是具有较小的整数的元素,该整数在两个元素的整数列表中不同。例如:

    [[1,1,99,100], - 1]< [[1,1,100,1], - 1],因为99< 100.

  3. 否则,如果整数列表相同,则较小的元素是element[1]中整数较小的元素。

  4. 我如何编写一个可以传递给sorted()或sort()的approriate键函数?

2 个答案:

答案 0 :(得分:22)

列出密钥中的三个条件:

sorted(inputlist, key=lambda e: (len(e[0]), e[0], e[1]))

现在,您首先按长度排序每个元素,然后直接比较第一个元素(仅在第一个元素长度相等时使用),然后再按最后一个整数的值进行排序。

Python按字典顺序对元组和列表进行排序;比较第一个元素,并且只有在没有差异的情况下,比较第二个元素等。

此处的第二个元素是e[0],仅当两个比较条目都具有相等长度的嵌套列表时才会使用。这些再次按字典顺序进行比较,因此将元素配对,直到一对不同。

答案 1 :(得分:8)

key = lambda x: (len(x[0]), x[0], x[1])

这是有效的,因为元组(和列表)通过依次查看每个元素进行比较,直到找到差异。因此,当您希望按优先顺序对多个条件进行排序时,只需将每个条件以相同的顺序粘贴到元组的元素中。

我假设“较小”的意思与“较小”相同,也就是说你意味着要比较绝对值。