使用Python在两列上进行数字排序,但顺序不同

时间:2013-07-04 15:37:08

标签: python sorting numeric

我必须根据两列对多列文件进行排序。两列都有浮点数,第一个排序应该从低到高,第二个从高到低。这是样本文件:

A        B        C        D
AK       0.01     200.8    NY
DK       0.90     50.5     PHL
AB       0.0002   750.04   Port
GA       0.076    340.00   NY

所以,我必须首先按照从低到高的顺序对B列进行排序,然后按照从高到低的顺序对C列进行排序。我的代码花了很多时间,让我的笔记本电脑没有响应,我相信不应该这样。此外,我不知道如何对B列进行排序'反向'即从高到低。这是代码:

fh_in = open(res_file,'r')
res = [line.strip('\n').split('\t') for line in fh_in]##Line converted to list and read
res_list = list(res) ##List to hold results while pre-processing
res_list.sort(key= lambda x: (float(x[int(1)]),-float(x[2])))##Sort on Col A and B
print ('Sorted results:\n',res_list)

如何对列B从高到低排序的两列进行排序?什么是最快的实现方式,因为我有多个文件,每个文件有25,000行* 50列?

真的很感谢你的帮助。

-ak -

1 个答案:

答案 0 :(得分:3)

只需返回负数:

res_list.sort(key=lambda x: (float(x[1]), -float(x[2])))

这会反转B排序顺序,但请注意数据首先在A 列上排序。

请注意,您可以使用sorted()函数将排序与代码中的上一行结合使用:

res_list = sorted(res, key=lambda x: (float(x[1]), -float(x[2]))