我正在使用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
将输出由house组织的
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])
还是有其他方式可以按特定的列表元素排序
答案 0 :(得分:1)
.sort()
就位,所以你只需写:
data.sort(key=lambda item: item[2])
lambda item: item[2]
基本上是简写:
def get_sort_key(item):
return item[2]
此外,由于您的文件是CSV文件,我会使用csv
module。
答案 1 :(得分: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]))
答案 2 :(得分: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'))
答案 3 :(得分: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