Использование Python для получения выходных данных CSV для следующего примера - PullRequest
2 голосов
/ 30 мая 2010

Я снова вернулся с моей продолжающейся сагой вопросов распределения студенческих проектов. Благодаря Морон (который не соответствует его тезке) у меня есть немного направления для оценки части моего проекта.

Следуя идее проблемы назначения и венгерского алгоритма, я хотел бы выразить свои данные в виде файла .csv, который в конечном итоге выглядел бы так в форме электронной таблицы. Это основано на структуре, которую я видел здесь .

|          | 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()) даст мне отсортированный список всех идентификаторов студентов, которые будут заполнять метки строк, а sorted(projects.keys()) даст мне список, который мне нужен для заполнения меток столбцов. Таким образом, для каждого студента, я бы зашел в их словарь предпочтений и сопоставил соответствующие проекты с рангами Я могу сделать это много.

Я не могу понять, как создать файл .csv. Любая помощь, указатели или хорошие учебники будут высоко оценены.

Ответы [ 2 ]

5 голосов
/ 30 мая 2010

Проверьте модуль 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)
3 голосов
/ 30 мая 2010

Модуль csv был создан именно для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...