【问题标题】:Sorting a list from Excel from highest to lowest将Excel中的列表从高到低排序
【发布时间】:2015-05-19 20:54:01
【问题描述】:

我需要对现有 Excel 文件中三个学生的分数进行排序,找到他们的最高分数,然后将这些分数从最高到最低输出到一个新的 Excel 文件中。

我了解如何从文件中读取并找到最大值。到目前为止,这是我的代码:

import csv
import operator
file_reader=open("scoreresults.csv","r")
csv_r=csv.reader(file_reader,delimiter=",")
file_writer =open( "score results output.csv","w", newline="")
csv_w=csv.writer(file_writer)
newdata=[]
for row in csv_r:
    forename,deposit1,deposit2,deposit3=row
    newdata.append(forename)
    newdata.append(deposit1)
    newdata.append(deposit2)
    newdata.append(deposit3)

    file=[forename,deposit1,deposit2,deposit3]
    maximumn=max(file)
    file1=[forename,maximumn]
    file1.sort(key=operator.itemgetter(1))
    csv_w.writerow([file1])
file_reader.close()
file_writer.close()

我没有在我尝试排序的地方添加位,因为我在那里完全失败了。当我尝试使用 itemgetter 时,我只能打印,不能保存到文件中,并且它从低到高排序。

它的外观示例如下:

name score                                       name score
James 2                     should turn into     sam  10   
sam   10                                         jane  9
dan    5                                         dan   5
lee    4                                         lee   4
jane   9                                         james 2

【问题讨论】:

  • 你不应该。 1) 在一个循环中读取所有输入,2) 调用您的排序例程 3) 在另一个循环中写出您的排序列表?

标签: python excel sorting


【解决方案1】:
import csv
from operator import itemgetter

with  open("scoreresults.csv","r") as r, open( "score_results_output.csv","w", newline="") as f:
    csv_w = csv.writer(f)
    csv_r = csv.reader(r)
    csv_w.writerows(sorted((((name, max(scores,key=int)) 
                    for name,*scores in csv_r)), key=itemgetter(1), reverse=True))

首先使用csv_w.writerow(next(csv_r)) 编写标题,然后使用max(scores,key=int)) 对获得每个用户的最高分数的行进行排序,传递键key=itemgetter(1) 以按第二个元素对元素进行排序,这是每个用户的最高分数与reverse=True 一起使用,从高到低排序。

输入:

name,score
sam,10,12,13
dan,5,23,2
lee,4,23,5
jane,9,2,10

输出:

name,score
dan,23
lee,23
sam,13
jane,10

基于forename,deposit1,deposit2,deposit3=row 我假设你有一个名字和每行三个分数

在你自己的代码中,你让生活变得比它需要的要困难得多,你的排序永远不会起作用的原因是你在比较字符串而不是整数,你需要强制转换为 int:

file1.sort(key=lambda x: int(x[1]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2020-08-10
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多