student.txt:
Akçam Su Tilsim PSYC 3.9
Aksel Eda POLS 2.78
Alpaydin Dilay ECON 1.2
Atil Turgut Uluç IR 2.1
Deveci Yasemin PSYC 2.9
Erserçe Yasemin POLS 3.0
Gülle Halil POLS 2.7
Gündogdu Ata Alp ECON 4.0
Gungor Muhammed Yasin POLS 3.1
Hammoud Rawan IR 1.7
Has Atakan POLS 1.97
Ince Kemal Kahriman IR 2.0
Kaptan Deniz IR 3.5
Kestir Bengisu IR 3.8
Koca Aysu ECON 2.5
Kolayli Sena Göksu IR 2.8
Kumman Gizem PSYC 2.9
Madenoglu Zeynep PSYC 3.1
Naghiyeva Gulustan IR 3.8
Ok Arda Mert IR 3.2
Var Berna ECON 2.9
Yeltekin Sude PSYC 1.2
您好,我想写一个函数,它将文件中每个学生的信息读入字典,其中键是部门,值是给定部门中的学生列表(元组列表)。每个学生的信息存储在一个元组中 包含(姓氏,GPA)。文件中的学生可能有多个姓名,但只存储姓氏和gpa。函数应该返回字典。(姓氏是每行的第一个单词。)
这就是我所尝试的:
def read_student(ifile):
D={}
f1=open(ifile,'r')
for line in f1:
tab=line.find('\t')
space=line.rfind(' ')
rtab=line.rfind('\t')
student_surname=line[0:tab]
gpa=line[space+1:]
department=line[rtab+1:space]
if department not in D:
D[department]=[(student_surname,gpa)]
else:
D[department].append((student_surname,gpa))
f1.close()
return D
print(read_student('student.txt'))
我认为主要的问题是有一种混乱,因为有时候tab在单词后面,有时候空格在单词后面,所以我不知道在这种情况下如何正确使用find函数
当你可以简单地
split
时,为什么还要处理rfind
和find
呢如果您知道您的列总是由
\t
分隔,那么您可以改为使用cols = line.split('\t')
。第二栏是学生的名字,第三栏是系,第四栏是GPA有几点建议:
defaultdict
来避免每次检查if department not in D
with
来管理文件的读取,这样就不必担心f1.close()
。这是在Python中读取文件的首选方法李>见下文-您必须注意姓氏,但问题中的其他细节已处理完毕
输出
您可以使用
split(' ', 1)
提取姓氏。它给出了包含两个元素的列表。第一个是姓氏。然后再次使用rsplit(' ', 1)
分割第二个元素以获得结果。它再次给出了包含两个元素的列表,第一个元素是name和dept,第二个元素是gpa。再次使用瞬间元素获取部门输出:
相关问题 更多 >
编程相关推荐