通过记住以前的

2024-06-01 03:15:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中有一个list,如下所示

 l =    [['4K', ['read', '10'], ['rand', '70']],
        ['64K', ['read', '15'], ['rand', '0']],
        ['64K', ['read', '0'], ['rand', '0']],
        ['4K', ['read', '60'], ['rand', '100']],
        ['4K', ['read', '50'], ['rand', '0']]]

如果temp = ['4K', ['read', '10'], ['rand', '100'],我首先要基于temp[2][1]排序,然后我要对列表进行进一步排序,而不修改前一个关于temp[1][1]的排序。我希望最终结果是这样的

res = [['64K', ['read', '0'], ['rand', '0']],
       ['64K', ['read', '15'], ['rand', '0']],
       ['4K', ['read', '50'], ['rand', '0']],
       ['4K', ['read', '10'], ['rand', '70'],
       ['4K', ['read', '60'], ['rand', '100']
      ]

在上面的res中,优先权首先赋予rand,然后read与排序的rand一起排序。我尝试过像l.sort(key=lambda x: int(x[2][1]))这样的方法,它首先对rand进行排序,但是对相同的l进行进一步排序并不会产生预期的输出,因为前面的排序不会被记住。有什么简单的方法吗?或者,唯一的方法是用相同的rand进一步拆分列表,然后在最后进行排序和合并


Tags: 方法lambdakey列表read排序ressort
2条回答
l.sort(key=lambda x: (int(x[2][1]), int(x[1][1])))

做你想做的事。元组按优先顺序排序

@Oersted的答案是可行的,但是,当按多个条件排序时,一般规则是使用stable sortwhich pythons ^{} is)进行排序,并且要向后排序这些条件,此规则可以在任何地方使用,从excel排序到基于web的表排序,在这种情况下,您将使用:

l.sort(key=lambda x: int(x[1][1]))
l.sort(key=lambda x: int(x[2][1]))

相关问题 更多 >