【发布时间】:2011-01-18 15:14:05
【问题描述】:
对于我的项目,讲师(定义为一个班级)的角色是为学生提供项目。项目本身也是一个类。我有一些全局字典,由唯一的数字 id 键入,用于映射到对象的讲师和项目。
因此对于“讲师”字典(当前):
lecturer[id] = Lecturer(lec_name, lec_id, max_students)
我目前正在读取从数据库生成的以空格分隔的文本文件。我没有直接访问数据库的权限,所以我对文件的格式没有太多发言权。这是一个虚构的 sn-p,它显示了文本文件的结构。请见谅。
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
在Alex Martelli 和Oddthinking 的建议下,我回去做了一些更改并尝试打印结果。
这里是sn-p的代码:
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。
【问题讨论】:
-
提示:“我得到的只是最后一个被读入的 proj_id。”
lecturers[lec_id].offered_proj的代码实际上是做什么的?它一定是在创造一个新的、空的集合。也发布该代码。
标签: python class dictionary