我是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名学生。除此之外,还有什么方法可以确保学生通过这种方法获得前三种选择?
再次抱歉这个问题的一般性质,但任何指导方法都会有所帮助。
答案 0 :(得分:0)
假设输入的实际格式为:
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]
我没有真正对此进行调试,因此可能存在错误,但是注释提供了一般性的想法。