我再次回到学生项目分配问题的持续传奇。感谢Moron(与他的同名不符),我对项目的评估部分有一些指导。
按照分配问题和匈牙利算法的想法我想以.csv文件的形式表达我的数据,最终在电子表格形式中看起来像这样。这是基于我看到here的结构。
| | Project 1 | Project 2 | Project 3 |
|----------|-----------|-----------|-----------|
|Student1 | | 2 | 1 |
|----------|-----------|-----------|-----------|
|Student2 | 1 | 2 | 3 |
|----------|-----------|-----------|-----------|
|Student3 | 1 | 3 | 2 |
|----------|-----------|-----------|-----------|
使其不那么神秘:行是学生/代理,列代表项目/任务。显然,一个项目可以分配给一个学生。简而言之,这就是我的项目的意义所在。这些字段代表学生对项目的偏好权重(范围从1到10)。如果是空白,该学生不想要该项目,并且他/她没有被分配的可能性。
无论如何,我的数据存储在词典中。特别是学生和项目词典,以便:
students[student_id] = Student(student_id, student_name, alloc_proj, alloc_proj_rank, preferences)
where preferences is in the form of a dictionary such that
preferences[rank] = {project_id}
和
projects[project_id] = Project(project_id, project_name)
我知道sorted(students.keys())
将为我提供一个排序列表,列出所有学生ID,这些ID将填充行标签,sorted(projects.keys())
将为我提供填写列标签所需的列表。因此,对于每个学生,我会进入他们的偏好字典,并将适用的项目与排名相匹配。我能做那么多。
我失败的地方是了解如何创建.csv文件。任何帮助,指针或好的教程都将受到高度赞赏。
答案 0 :(得分:5)
查看csv模块。基本上,您只需要将数据转换为某种顺序(列表,元组等),然后您就可以csv.writerow()
import csv
cot=csv.writer(open('file.csv','wb'))
tmp=[['','Project 1','Project 2','Project 3'],
['Student1','','2','1'],
['Student2','1','2','3'],
['Student3','1','3','2']]
for t in tmp:
cot.writerow(t)
答案 1 :(得分:3)
csv
模块就是为此而制作的。