我读过this post并且还没有结束为我工作。
编辑:我所描述的功能就像Excel中的排序功能一样......如果能让它更清晰
这是我的情况,我有一个制表符分隔的文本文档。每行大约有125,000行和6列(列由制表符分隔)。我已将文档拆分为二维列表。
我正在尝试编写一个通用函数来对二维列表进行排序。基本上我想有一个函数,我可以传递大的列表,以及一个或多个列的关键字我想排序大的列表。显然,我希望传递的第一个键是主要的排序点,然后是第二个键,等等。
仍然困惑?
以下是我想要做的一个例子。
Joel 18 Orange 1
Anna 17 Blue 2
Ryan 18 Green 3
Luke 16 Blue 1
Katy 13 Pink 5
Tyler 22 Blue 6
Bob 22 Blue 10
Garrett 24 Red 7
Ryan 18 Green 8
Leland 18 Yellow 9
说我把这个列表传递给了我的魔法函数,就像这样:
sortByColumn(bigList, 0)
Anna 17 Blue 2
Bob 22 Blue 10
Garrett 24 Red 7
Joel 18 Orange 1
Katy 13 Pink 5
Leland 18 Yellow 9
Luke 16 Blue 1
Ryan 18 Green 3
Ryan 18 Green 8
Tyler 22 Blue 6
和...
sortByColumn(bigList, 2, 3)
Luke 16 Blue 1
Anna 17 Blue 2
Tyler 22 Blue 6
Bob 22 Blue 10
Ryan 18 Green 3
Ryan 18 Green 8
Joel 18 Orange 1
Katy 13 Pink 5
Garrett 24 Red 7
Leland 18 Yellow 9
任何线索?
答案 0 :(得分:11)
import operator:
def sortByColumn(bigList, *args)
bigList.sort(key=operator.itemgetter(*args)) # sorts the list in place
答案 1 :(得分:8)
这将按第2列和第3列排序:
a.sort(key=operator.itemgetter(2,3))
答案 2 :(得分:2)
这里的关键思想(双关语)是使用返回元组的键函数。
下面,关键功能是lambda x: (x[idx] for idx in args)
x
设置为等于aList的元素 - 即一行数据。它返回一个值元组,而不仅仅是一个值。 sort()方法根据列表的第一个元素进行排序,然后断开与第二个元素的关系,依此类推。见http://wiki.python.org/moin/HowTo/Sorting#Sortingbykeys
#!/usr/bin/env python
import csv
def sortByColumn(aList,*args):
aList.sort(key=lambda x: (x[idx] for idx in args))
return aList
filename='file.txt'
def convert_ints(astr):
try:
return int(astr)
except ValueError:
return astr
biglist=[[convert_ints(elt) for elt in line]
for line in csv.reader(open(filename,'r'),delimiter='\t')]
for row in sortByColumn(biglist,0):
print row
for row in sortByColumn(biglist,2,3):
print row
答案 3 :(得分:1)
确保已将数字转换为整数,否则它们将按字母顺序排序,而不是按数字排序
# Sort the list in place
def sortByColumn(A,*args):
import operator
A.sort(key=operator.itemgetter(*args))
return A
或
# Leave the original list alone and return a new sorted one
def sortByColumn(A,*args):
import opertator
return sorted(A,key=operator.itemgetter(*args))