Python按排序排序脚本

时间:2015-01-08 18:21:55

标签: python sorting

我是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名学生。除此之外,还有什么方法可以确保学生通过这种方法获得前三种选择?

再次抱歉这个问题的一般性质,但任何指导方法都会有所帮助。

1 个答案:

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

我没有真正对此进行调试,因此可能存在错误,但是注释提供了一般性的想法。