这可能是一个相当简单的问题 - 但在我的辩护中,我对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进行排序时 - 序列会搞砸。
这是一项简单的任务吗?或者我需要在列表中循环两次吗?怎么做到呢?我很无能为力。谢谢你的时间!
答案 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()慢)或(暂时)更改子列表元素的顺序。