Python:排序多维列表,但尊重内部增量

时间:2014-09-27 22:41:53

标签: python sorting csv

这可能是一个相当简单的问题 - 但在我的辩护中,我对python来说相对较新! 在这种情况下 - 我已将CSV文件加载到列表中,如下所示:

["4567", "59.0000", 7.0000", "1"]
["4567", "59.0000", 7.0000", "2"]
["4567", "59.0000", 7.0000", "5"]
["1234", "59.0000", 7.0000", "1"]
["1234", "59.0000", 7.0000", "2"]
["1234", "59.0000", 7.0000", "3"]

第一列是一个唯一的id - 其中最后一个是需要保留的序列中的数字(我的问题的根源)。

我想按唯一ID(第一行)排序,但保持序列顺序。所以我宁愿拥有这样的列表

["1234", "59.0000", 7.0000", "1"]
["1234", "59.0000", 7.0000", "2"]
["1234", "59.0000", 7.0000", "3"]
["4567", "59.0000", 7.0000", "1"]
["4567", "59.0000", 7.0000", "2"]
["4567", "59.0000", 7.0000", "5"]

显然,当我只对独特的id进行排序时 - 序列会搞砸。

这是一项简单的任务吗?或者我需要在列表中循环两次吗?怎么做到呢?我很无能为力。谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

这个问题似乎是“如何按多个值排序?”

如果是这样,请参阅How To: Sorting,其中包含此内容以及大多数其他案例。基本方法是使用key函数返回元组,因为元组可以在Python中订购。

# sort by 1st column, then 4th column (both as integer values)
sorted(rows, key = lambda r: (int(r[0]), int(r[3]))

现在,即使不是第4列(或者如果它是行的顺序而不是第4列的重要值),我们仍然可以使用sorted uses is a stable sort的事实。这意味着对于任何等效比较的项目/行,将保留顺序。因此,以下结果(对于给定数据)与第一种类型具有相同的结果:

# sort by 1st column (as integer); preserve the "row order" by stability
sorted(rows, key = lambda r: int(r[0]))

答案 1 :(得分:0)

我建议使用类而不是列表列表。但您也可以使用排序中的键(排序比list_.sort()慢)或(暂时)更改子列表元素的顺序。