0

我正在使用 python 进行一个项目,该项目涉及包含学生信息的文件。该文件按姓氏字母顺序排列学生,格式如下:

姓,名,房子,活动

第一个方向是将格式更改为

名字,姓氏,房子,活动

我已经做到了。下一步是按房子组织它们,以便

Amewolo, bob J.,E2,none
Anderson, billy D.,E1,basketball
Andrade, Danny R.,E2,SOCCER
Banks-Audu, Rob A.,E2,FOOTBALL
Brads, Kev J.,N1,BAND
souza, Ian L.,E1,ECO CLUB
Dimijian, Annie A.,S2,SPEECH AND DEBATE
Garcia, Yellow,E1,NONE
Glasper, Larry L.,N1,CHOIR

将按房屋组织输出它们

Amewolo, bob J.,E2,none
Andrade, Danny R.,E2,SOCCER
Banks-Audu, Rob A.,E2,FOOTBALL
Anderson, billy D.,E1,basketball
souza, Ian L.,E1,ECO CLUB
Garcia, Yellow,E1,NONE
Brads, Kev J.,N1,BAND
Glasper, Larry L.,N1,CHOIR
Dimijian, Annie A.,S2,SPEECH AND DEBATE

到目前为止,这是我的代码

def main():
    info = open('Studentinfo.txt', 'r')
    for i in info:
        data = i
        data = data.rstrip('\n')
        data = data.split(',')
        print(format(data[1], '19s'),end='')
        print(format(data[0], '19s'),end='')
        print(format(data[2], '19s'),end='')
        print(format(data[3], '19s'))

main()

我应该使用

data = data.sort(key = data[2])

还是有另一种方法可以按该特定列表元素排序

4

4 回答 4

1

.sort()是就地的,所以你只需写:

data.sort(key=lambda item: item[2])

lambda item: item[2]基本上是以下的简写:

def get_sort_key(item):
    return item[2]

另外,由于您的文件是 CSV 文件,我会使用csv模块.

于 2013-04-17T23:46:00.753 回答
1

只需将sort函数lambda用作key

with open('info.txt', 'r') as f:
      data = [line.split(',') for line in f]
print(sorted(lists, key=lambda x: x[2]))
于 2013-04-17T23:48:05.660 回答
1

data是文件中的单个项目。因此,如果您对该项目进行排序,您所做的就是混合单个项目的列。比如Brads, Kev J., N1, BAND会诉诸于BAND, Brads, Kev J., N1

相反,您想要的是拥有所有项目的列表并对该列表进行排序。因此,您需要将每个项目的数据对象放到另一个列表中,然后对该列表进行排序:

allItems = []
for i in info:
    data = i.rstrip('\n').split(',')
    allItems.append(data)

allItems.sort(key=lambda x: x[2]) # sort by house

for data in allItems:
    print(format(data[1], '19s'), end='')
    print(format(data[0], '19s'), end='')
    print(format(data[2], '19s'), end='')
    print(format(data[3], '19s'))
于 2013-04-17T23:50:02.113 回答
1
import sys # just used to print to sys.stdout, you can print to a file instead
import csv
from operator import itemgetter

with open('Studentinfo.txt') as f:
    r = csv.DictReader(f, ('lastname','firstname','house','activity'))
    w = csv.DictWriter(sys.stdout, ('firstname', 'lastname','house','activity'))
    w.writerows(sorted(r, key=itemgetter('house')))

 billy D.,Anderson,E1,basketball    
 Ian L.,souza,E1,ECO CLUB    
 Yellow,Garcia,E1,NONE    
 bob J.,Amewolo,E2,none    
 Danny R.,Andrade,E2,SOCCER    
 Rob A.,Banks-Audu,E2,FOOTBALL    
 Kev J.,Brads,N1,BAND    
 Larry L.,Glasper,N1,CHOIR    
 Annie A.,Dimijian,S2,SPEECH AND DEBATE
于 2013-04-17T23:50:06.130 回答