Python 按排名排序脚本
Python Sorting Script by Rank
我是 python 的新手,对于这个问题的一般性质,我深表歉意。我已经对如何从概念上解决这个问题进行了大量研究,希望能就使用何种方法向前迈进提供一些建议。
我正在尝试创建一个循环,该循环将从 csv 中吸收约 80 名学生,每个学生根据选择对 8 位不同的教授进行排名,然后根据他们的首选将他们分类到 类 中:
Student 1 = {profA, profC, profH, profD, profE, profB, profG, profF}
Student 2 = {profB, profD, profH, profE, profA, profC, profG, profF}
Student 3 = {profC, profC, profH, profD, profE, profB, profG, profF}
..... to Student 80
然后创建一个列表:
ProfA: (Student 1, Student 7, ...)
ProfB: (Student 2, Student 23, ...)
ProfC: (Student 3, Student 8, ...)
最后还需要优化名册,让学生可以进入第二和第三选择,因为每个教授只能有10名学生。除此之外,有没有办法确保通过这种方法获得前 3 个选择的学生分布?
再次对这个问题的一般性质感到抱歉,但任何指导方法都会有所帮助。
假设您输入的真实格式是:
Student_1, profA, profC ...
Student_2, profB, profD
.
.
.
Student_80,...,...
然后你可以简单地把数据解析成字典。
masterDict = {}
profVotes = {}
f = open('your_csv_file.csv')
for line in f:
L1 = line.split(',')
# {Student: [first choice, second choice, third choice...]}
masterDict[L1[0]] = [L1[1], L1[2], L1[3], L1[4], L1[5], L1[6], L1[7], L1[8]]
# Make a key for each professor in the final dictionary.
# Initialize list of students who voted for that professor.
for i in range(1,9):
if L1[i] not in profVotes.keys():
profVotes[L1[i]] = []
# Fill list in order of vote.
for j in range(8):
for student in masterDict.keys():
profVotes[masterDict[student][j]].append(student)
# Cap the list at 10
for prof in profVotes.keys():
profVotes[prof] = profVotes[prof][:9]
我并没有真正进行调试的更改,因此可能存在错误,但评论提供了一般思路。
我是 python 的新手,对于这个问题的一般性质,我深表歉意。我已经对如何从概念上解决这个问题进行了大量研究,希望能就使用何种方法向前迈进提供一些建议。
我正在尝试创建一个循环,该循环将从 csv 中吸收约 80 名学生,每个学生根据选择对 8 位不同的教授进行排名,然后根据他们的首选将他们分类到 类 中:
Student 1 = {profA, profC, profH, profD, profE, profB, profG, profF}
Student 2 = {profB, profD, profH, profE, profA, profC, profG, profF}
Student 3 = {profC, profC, profH, profD, profE, profB, profG, profF}
..... to Student 80
然后创建一个列表:
ProfA: (Student 1, Student 7, ...)
ProfB: (Student 2, Student 23, ...)
ProfC: (Student 3, Student 8, ...)
最后还需要优化名册,让学生可以进入第二和第三选择,因为每个教授只能有10名学生。除此之外,有没有办法确保通过这种方法获得前 3 个选择的学生分布?
再次对这个问题的一般性质感到抱歉,但任何指导方法都会有所帮助。
假设您输入的真实格式是:
Student_1, profA, profC ...
Student_2, profB, profD
.
.
.
Student_80,...,...
然后你可以简单地把数据解析成字典。
masterDict = {}
profVotes = {}
f = open('your_csv_file.csv')
for line in f:
L1 = line.split(',')
# {Student: [first choice, second choice, third choice...]}
masterDict[L1[0]] = [L1[1], L1[2], L1[3], L1[4], L1[5], L1[6], L1[7], L1[8]]
# Make a key for each professor in the final dictionary.
# Initialize list of students who voted for that professor.
for i in range(1,9):
if L1[i] not in profVotes.keys():
profVotes[L1[i]] = []
# Fill list in order of vote.
for j in range(8):
for student in masterDict.keys():
profVotes[masterDict[student][j]].append(student)
# Cap the list at 10
for prof in profVotes.keys():
profVotes[prof] = profVotes[prof][:9]
我并没有真正进行调试的更改,因此可能存在错误,但评论提供了一般思路。