Для моего проекта роль лектора (определяемого как класс) состоит в том, чтобы предлагать проекты студентам. Сам проект тоже класс. У меня есть несколько глобальных словарей, снабженных уникальными числовыми идентификаторами для лекторов и проектов, которые отображаются на объекты.
Таким образом, для словаря "лекторов" (в настоящее время):
lecturer[id] = Lecturer(lec_name, lec_id, max_students)
В настоящее время я читаю в текстовом файле с пробелами с разделителями, который был сгенерирован из базы данных. У меня нет прямого доступа к базе данных, поэтому я мало что могу сказать о том, как файл отформатирован. Вот вымышленный фрагмент, который показывает, как структурирован текстовый файл. Прошу прощения за нежность.
0001 001 "Miyamoto, S." "Even Newer Super Mario Bros"
0002 001 "Miyamoto, S." "Legend of Zelda: Skies of Hyrule"
0003 002 "Molyneux, P." "Project Milo"
0004 002 "Molyneux, P." "Fable III"
0005 003 "Blow, J." "Ponytail"
Структура каждой строки в основном proj_id, lec_id, lec_name, proj_name
.
Теперь я сейчас читаю соответствующие данные в соответствующие объекты. Таким образом, proj_id
хранится в class Project
, тогда как lec_name
является объектом class Lecturer
и др. Классы Lecturer
и Project
в настоящее время не связаны.
Однако, поскольку я читаю в каждой строке текстового файла, для этой строки я хочу прочитать проект, предложенный лектором, в класс Lecturer
; Я уже читаю proj_id
в Project
классе. Я хотел бы создать объект в Lecturer
с именем offered_proj
, который должен быть набором или списком проектов, предлагаемых этим лектором. Таким образом, всякий раз, когда для строки я читаю в новом проекте под тем же lec_id
, offered_proj
будет обновляться вместе с этим проектом. Если бы я хотел получить список проектов, предлагаемых лектором, я бы в идеале просто хотел бы использовать print lecturers[lec_id].offered_proj
.
Мой Python не великолепен, и я был бы признателен, если бы кто-нибудь показал мне способ сделать это. Я не уверен, лучше ли это как набор или список.
Update
После совета от Алекс Мартелли и Нечетное мышление Я вернулся и внес некоторые изменения и попытался напечатать результаты.
Вот фрагмент кода:
for line in csv_file:
proj_id = int(line[0])
lec_id = int(line[1])
lec_name = line[2]
proj_name = line[3]
projects[proj_id] = Project(proj_id, proj_name)
lecturers[lec_id] = Lecturer(lec_id, lec_name)
if lec_id in lecturers.keys():
lecturers[lec_id].offered_proj.add(proj_id)
print lec_id, lecturers[lec_id].offered_proj
В строке print lecturers[lec_id].offered_proj
выводится следующий вывод:
001 set([0001])
001 set([0002])
002 set([0003])
002 set([0004])
003 set([0005])
По сути, создается впечатление, что набор переписан или что-то в этом роде. Поэтому, если я попытаюсь напечатать для конкретного лектора print lec_id, lecturers[001].offered_proj
, все, что я получу, это последний прочитанный proj_id
.