首页 > 解决方案 > 如何从第7列对python文件中的所有记录进行排序?

问题描述

所以我有一个文件:

202010000  Asem       ICS104      0         100         100         200
202010000  Asem       ICS108      2          75          -1          75
202010001  Khalid     ICS202      0          -1          -1          -1
201928690  Hamza      ICS104      0          80          -1          80
201928440  Abdullah   ICS104      0         100         100         200
202012340  Hassan     ICS104      3          60          38          98
201872630  Hadi       ICS108      8          90          90         180
201562730  Anwar      ICS202      4          75          75         150
201829380  Ali        ICS210      3          90          75         165

我需要按总成绩的降序显示此文件中的所有记录(第 7 列)。我问了一个非常相似的问题,根据名称(第 2 列)按字母顺序对记录进行排序。答案是这样的:

studentFile = open(input("Enter file name: "), "r")
lines = studentFile.readlines()
    for line in sorted(lines, key=lambda l: l.split()[1]):
        print(line)

我试图为第 7 列做一些非常相似的事情,如下所示:

studentFile = open(input("Enter file name: "), "r")
lines = studentFile.readlines()
    for line in sorted(lines, key=lambda l: l.split()[6], reverse= True):
        print(line)

但它没有按正确的降序给我数字:

202012340  Hassan     ICS104      3          60          38          98

201928690  Hamza      ICS104      0          80          -1          80

202010000  Asem       ICS108      2          75          -1          75

202010000  Asem       ICS104      0         100         100         200

201928440  Abdullah   ICS104      0         100         100         200

201872630  Hadi       ICS108      8          90          90         180

201829380  Ali        ICS210      3          90          75         165

201562730  Anwar      ICS202      4          75          75         150

202010001  Khalid     ICS202      0          -1          -1          -1

我究竟做错了什么?

标签: pythonfile

解决方案


您需要int在排序之前将其转换为,试试这个:

studentFile = open(input("Enter file name: "), "r")
lines = studentFile.readlines()
    for line in sorted(lines, key=lambda l: int(l.split()[6]), reverse= True):
        print(line)

输出:

202010000  Asem       ICS104      0         100         100         200

201928440  Abdullah   ICS104      0         100         100         200

201872630  Hadi       ICS108      8          90          90         180

201829380  Ali        ICS210      3          90          75         165

201562730  Anwar      ICS202      4          75          75         150

202012340  Hassan     ICS104      3          60          38          98

201928690  Hamza      ICS104      0          80          -1          80

202010000  Asem       ICS108      2          75          -1          75

202010001  Khalid     ICS202      0          -1          -1          -1

编辑:@cwittah 已经在评论中说过了,我在输入答案时没有看到


推荐阅读