我有列表清单:
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,第二个是字符串 感谢所有答案。
答案 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