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]

我并没有真正进行调试的更改,因此可能存在错误,但评论提供了一般思路。