我正在用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])

还是我可以通过该特定列表元素进行排序的另一种方法

===============>>#1 票数:1

.sort()就位,因此您只需编写:

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

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

def get_sort_key(item):
    return item[2]

另外,由于您的文件是CSV文件,因此我将使用csv模块

===============>>#2 票数:1

只需使用带有lambda函数作为key sort

with open('info.txt', 'r') as f:
      data = [line.split(',') for line in f]
print(sorted(lists, key=lambda x: x[2]))

===============>>#3 票数: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'))

===============>>#4 票数: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

  ask by derpyherp translate from so

未解决问题?本站智能推荐: