我试图按每个学生的最高分(他们得到的三个分数)对csv文件进行排序。这是我的代码。
def score_high(filename):
people = []
list11 =[]
count = 0
with open(filename) as Class:
reader = c.reader(Class,delimiter=",")
for row in reader:
people = []
people.append(row[0])
if int(row[1]) > int(row[2]) and int(row[1]) > int(row[3]):
score = row[1]
elif int(row[2]) > int(row[3]):
score = row[2]
elif int(row[3]) > int(row[2]):
score = row[3]
people.append(score)
count = count+1
list11.insert(count,people)
sort=sorted(list11, key = o.itemgetter('''a sort for the score'''), reverse = False)
for eachline in sort:
print( eachline)
csv文件:
kieran,3,10,7
ben,4,8,5
ethan,9,1,4
oliver,7,2,3
答案 0 :(得分:2)
这里有几个问题。首先,使用'''a sort for the score'''
作为itemgetter
的索引是完全错误的。您应该传递itemgetter
您希望获得的列表(或元组)项的索引 - 在这种情况下,该值为1
。
其次,由于sort
函数正在尝试对字符串值进行排序,因此您没有找到正确的顺序,如果您尝试比较'10' > '9'
,您会看到输出实际上是False
。在附加分数之前,您需要将分数转换为整数。
最后一点 - 我不会import csv as c
或import operator as o
。您应该能够键入三到八个字母,这会使代码更难以阅读。请记住,代码的读取频率远远高于编写代码。
import csv
import operator
def score_high(filename):
people = []
list11 =[]
count = 0
with open(filename) as Class:
reader = csv.reader(Class,delimiter=",")
for row in reader:
people = []
people.append(row[0])
if int(row[1]) > int(row[2]) and int(row[1]) > int(row[3]):
score = row[1]
elif int(row[2]) > int(row[3]):
score = row[2]
elif int(row[3]) > int(row[2]):
score = row[3]
people.append(int(score))
count = count+1
list11.append(people) # use append here, you're going to sort it anyways
sort = sorted(list11, key=operator.itemgetter(1), reverse=True)
for s in sort:
print(s)
return sort
您也永远不会检查学生列表中得分最高的情况,但我会留下您自己做的事情。
答案 1 :(得分:0)
import csv
import operator
marks = operator.itemgetter(1,2,3)
with open('path/to/file') as infile:
data = list(csv.reader(infile))
data.sort(key=lambda row: max(int(i) for i in marks(row)))
for row in data: print(row)