有没有办法按python中的list元素组织文件内容?

时间:2013-04-17 23:42:58

标签: python python-3.x

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

还是有其他方式可以按特定的列表元素排序

4 个答案:

答案 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