通过first / descending和second / ascending元素对(整数,字符串)列表进行排序

时间:2018-05-02 08:43:36

标签: python python-3.x

我有列表清单:

unsorted_list = [[3, 'A'], [1, 'A'], [3, 'B'], [4, 'B'], [4, 'A'], [2, 'C']]

我想得到:

sorted_list = [[4, 'A'], [4, 'B'], [3, 'A'], [3, 'B'], [2, 'C'], [1, 'A']]

列表按第一个元素的降序排序。如果第一个元素相等,则按第二个元素排序,但按字母顺序排列(升序)

到目前为止,我有理由对它进行排序

unsorted_list.sort(key=lambda element: (element[0], element[1]), reverse=True)

这将按两个元素排序列表,但按降序排列。

问题:有没有办法按第一个元素(按降序排序)排序列表列表,如果第一个元素相等,那么第二个元素按升序排序?

编辑:第一个元素总是int,第二个是字符串 感谢所有答案。

2 个答案:

答案 0 :(得分:2)

您可以使用.sort两次给出的具体示例获得所需的结果。

首先在内部列表中订购第二个元素:

>>> unsorted_list.sort(key=lambda element:element[1])
>>> unsorted_list
[[3, 'A'], [1, 'A'], [4, 'A'], [3, 'B'], [4, 'B'], [2, 'C']]

其次,要订购第一个元素:

>>> unsorted_list.sort(key=lambda element:element[0], reverse=True)
>>> unsorted_list
[[4, 'A'], [4, 'B'], [3, 'A'], [3, 'B'], [2, 'C'], [1, 'A']]

答案 1 :(得分:1)

在这种特殊情况下,由于第一个值是整数,所以不要反转,只需使用负数键表示整数

unsorted_list = [[3, 'A'], [1, 'A'], [3, 'B'], [4, 'B'], [4, 'A'], [2, 'C']]

sorted_list = [[4, 'A'], [4, 'B'], [3, 'A'], [3, 'B'], [2, 'C'], [1, 'A']]

unsorted_list.sort(key=lambda element: (-element[0], element[1]))

print(unsorted_list====sorted_list)  # prints True