如何在Python中对嵌套列表的外部和内部子列表进行排序?

时间:2012-06-27 05:11:09

标签: python list sorting dictionary key

首先,道歉,如果这太天真(我是初学者)。 我有以下类型的列表列表,我想首先按内容列表的最后一个成员按升序排序:

data =  [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]

我通过使用sorted(data,key=operator.itemgetter(2),reverse = True)完成此操作,它给了我:

[[1, .45, 0], [3, .98, 0],[4, .82, 1], [5, .77, 1], [2, .49, 2], [6, .98, 2]]

现在,我想在子列表中进行排序,即首先使用中间成员作为键,按降序排列列表,其最后一个成员为“0”。然后将子列表排序为“1”作为其最后一个成员,依此类推。请注意,每个子列表中的元素数量不同,不知道。最终列表应如下所示:

[[3, .98, 0],[1, .45, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2],[2, .49, 2] ]

该列表实际上非常庞大,因此我正在寻找一种有效的实施方案。 任何指导将不胜感激!

2 个答案:

答案 0 :(得分:3)

>>> data =  [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]
>>> sorted(data, key=lambda x:(x[2], -x[1]))
[[3, 0.98, 0], [1, 0.45, 0], [4, 0.82, 1], [5, 0.77, 1], [6, 0.98, 2], [2, 0.49, 2]]

您可以根据需要向lambda添加额外的术语

答案 1 :(得分:1)

您可以传递已排序的多个键:

data =  [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ]
sorted(data, key=lambda x: (x[2], -x[1]))

[[3, 0.98, 0],
 [1, 0.45, 0],
 [4, 0.82, 1],
 [5, 0.77, 1],
 [6, 0.98, 2],
 [2, 0.49, 2]]