使用Python获取以下示例的CSV输出

Piz*_*zra 2 python csv project

我再次回到学生项目分配问题的持续传奇.感谢Moron(他的名字与他的名字并不匹配)我对项目的评估部分有一点指导.

继续使用赋值问题和匈牙利算法的想法我想以.csv文件的形式表达我的数据,最终在电子表格形式中看起来像这样.这是基于我在这里看到的结构.

|          | Project 1 | Project 2 | Project 3 |
|----------|-----------|-----------|-----------|
|Student1  |           |     2     |     1     |
|----------|-----------|-----------|-----------|
|Student2  |     1     |     2     |     3     |
|----------|-----------|-----------|-----------|
|Student3  |     1     |     3     |     2     |
|----------|-----------|-----------|-----------|
Run Code Online (Sandbox Code Playgroud)

为了减少它的含义:行是学生/代理,列代表项目/任务.显然,一个项目可以分配给一个学生.简而言之,这就是我的项目的意义所在.这些字段代表学生对项目的偏好权重(范围从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}
Run Code Online (Sandbox Code Playgroud)

projects[project_id] = Project(project_id, project_name)
Run Code Online (Sandbox Code Playgroud)

我知道sorted(students.keys())会给我一个排序列表,列出所有学生ID,这些ID将填充行标签,sorted(projects.keys())并给我填写列标签所需的列表.因此,对于每个学生,我会进入他们的偏好字典,并将适用的项目与排名相匹配.我能做那么多.

我失败的地方是了解如何创建.csv文件.任何帮助,指针或好的教程将受到高度赞赏.

Dav*_*ves 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)
Run Code Online (Sandbox Code Playgroud)