【发布时间】:2012-06-28 12:07:15
【问题描述】:
首先,如果这太天真了,请道歉(我是初学者)。 我有以下类型的列表,我想先按内部列表的最后一个成员升序排序:
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] ]
该列表实际上非常庞大,因此我正在寻找一种有效的实现方式。 任何指导将不胜感激!
【问题讨论】:
-
我认为你的第二个例子是倒退的……你倒序排序对吗?
-
抱歉,我想我在打字时犯了一个错误。它应该是 reverse = False。
-
只是为了更深入地研究这个(因为已经提供了答案),在这一步之前你到底想做什么?可能有更好的方法来实现您的目标,而不是担心内部排序组件。例如,如果您从某个地方读取此数据,则在加载时进行排序可能是有意义的。也可以使用生成器而不是列表/字典。如果您发布另一个问题,询问“是否有更好的方法来实现 X”,这可能会有所帮助。只是一个想法:)
-
@JoshSmeaton:非常感谢您的建议!我正在生成这些列表,这些列表通过计算形成字典中的值,可以认为对于 someset(A) 中的 avalues ,对于 someset(B) 中的 bvalues 返回 avalues + bvalues 即返回所有的总和两组中的成对组合。然后,键将是 setA 中的值,列表将是其 [所有元素的相应总和,与 setB 的相应元素配对]。我也将尝试形成一个单独的问题,但非常感谢任何反馈!
-
@R.Bahl 你可能想看看 itertools 包 - 它可能有一些对你有用的功能。例如,有效地生成成对组合。您最初从哪里获取数据也应该是一个可能的优化位置。在没有更多上下文的情况下,这个问题对我来说似乎很抽象。但是,就像我建议的那样,可能另一个问题可能会产生一些不错的解决方案。祝你好运。
标签: python list sorting dictionary key