我有一个排序列表,例如
[[1, 'start'], [13, 'start'], [13, 'end'], [15, 'end']]
是my_list.sort(key=lambda x: x[0])
的输出。但是,如果每个子列表的第0个元素都有联系,中间两个元素就是这种情况,那么我需要进行排序,以使带有end
的列表排在最前面。因此所需的输出将是
[[1, 'start'], [13, 'end'], [13, 'start'], [15, 'end']]
答案 0 :(得分:1)
您可以按另一个元素boolean
进行排序,指示第二个元素是否为end
:
my_list.sort(key=lambda x: (x[0], x[1] != 'end'))
[[1, 'start'], [13, 'end'], [13, 'start'], [15, 'end']]
这将使用以下元组列表来对列表进行排序:
[(x[0], x[1] != 'end') for x in my_list]
[(1, True), (13, True), (13, False), (15, False)]
如果第二个元素不是False
中的end
,则第二个元素将为my_list
。现在,鉴于第一个元素匹配,False
即(0)
将在True
(1)
之前,对该数组进行排序将产生预期的结果。
sorted([(x[0], x[1] != 'end') for x in my_list])
[(1, True), (13, False), (13, True), (15, False)]
@jpp指出,在这种情况下,您可以按字典顺序简单地按第二个元素排序:
my_list.sort(key=lambda x: (x[0], x[1]))
[[1, 'start'], [13, 'end'], [13, 'start'], [15, 'end']]
答案 1 :(得分:0)
尝试
my_list.sort(key = lambda x:(x[0],x[1]))