试图在列表中排列列表但不能正确排列数字

时间:2014-07-19 05:17:03

标签: python list python-2.7 sorting

所以我正在使用列表中包含大量列表的文件。我试图通过排名前5位的州和排名前5位的国家来安排参与者总数。

import csv
from operator import itemgetter #not really using this right now
crimefile = open('APExam.txt', 'r')
reader = csv.reader(crimefile)
allRows = [row for row in reader]
L = sorted(allRows,key=lambda x: x[1])
for item in L:
print item[0],','.join(map(str,item[1:]))

打印出类似这样的内容:

State  Total #,% passed,%female
Wyoming 0,0,0
New Hampshire 101,76,12
Utah 103,54,4
Mass 1067,67,18
Montana 11,55,0
Iowa 118,80,9
Alabama 126,79,17
Georgia 1261,51,18
Florida 1521,44,20
Illinois 1559,69,13
New Jersey 1582,74,15
Maine 161,67,16

这会以我正在寻找的方式打印文件,但参与者的总数不是按从大到小的顺序排序的;它是通过查看第一个元素来排序的。如何将其更改为更像:

New Jersey 1582,74,15
Illinois 1559,69,13
Florida 1521,44,20
Georgia 1261,51,18
Etc...

第一次在这里提问,任何帮助表示赞赏! :) 另外,我尝试不使用.sort()或find()函数或"在"运算符 - 例如"如果在[5,4,7 6]中为6 ......"

编辑*:通过更改L

L = sorted(allRows,key=lambda x: int(x[1]),reverse=True)

我已经达到了列表按降序排列的程度:

State  Total #,% passed,%female
California 4964,76,22
Texas 3979,62,23
New York 1858,69,20
Virginia 1655,60,19
Maryland 1629,66,20
New Jersey 1582,74,15
Illinois 1559,69,13
Florida 1521,44,20

现在我似乎无法弄清楚如何根据这些总数来取得前五名和后五名...

1 个答案:

答案 0 :(得分:1)

你搞砸了整理。无论文本可能是什么,CSV文件都包含文本。

L = sorted(allRows,key=lambda x: int(x[1]))