正确循环字典/使用字典作为数据库

时间:2015-02-16 21:43:02

标签: python dictionary

这看起来像CS 101风格的作业,但实际上并非如此。我正在尝试学习更多python,所以我开始编写一个小应用程序,为我保留了我的成绩簿。

我有一个类semester,它包含section个对象的字典。 一个部分是我正在教授的一个类,我正在操作的学期对象(我不想因为显而易见的原因而将它们称为类)。我最初将部分作为列表而不是字典,当我想向students添加semester的名单时,我可以这样做。

for sec in working_semester.sections:
    sec.addRosterFromFile(filename)

现在我已将sections semester成员更改为字典,以便我可以查找特定的字典,但是当我想将所有这些成员循环到做一些像我第一次设置一个新学期的时候我想要添加所有部分,然后循环遍历它们并将学生添加到每个部分。如果我尝试使用相同的代码循环遍历字典,它会给我键,但我希望得到这个值。

我还试图迭代这样的字典,这是我从older stack over flow question

中得到的
for sec in iter(sorted(working_semester.sections.iteritems())):
    sec.addRosterFromFile(filename)

但是iter(sorted ...返回一个元组(键,值)而不是项目,所以循环中的行给了我一个错误,即元组没有名为addStudent的函数。

目前我有这个修复程序,我循环键,然后使用键来访问这样的值:

for key in working_semester.sections:
    working_semester.sections[key].addRosterFromFile(filename)

必须有一种循环字典值的方法,或者这是不可取的?我对字典的理解是它们就像列表一样,而不是按照它的位置抓取一个元素它有一个特定的键,这样就可以更容易地抓住你想要的那个,无论它们处于什么顺序。我是否想念字典应该是什么用过的?

1 个答案:

答案 0 :(得分:2)

使用iteritems是一种很好的方法,您只需要解压缩密钥和值:

for key, value in iter(sorted(working_semester.sections.iteritems())):
    value.addRosterFromFile(filename)

如果你真的只需要这个值,你可以使用恰当命名的itervalues

for sec in sorted(working_semester.sections.itervalues()):
    sec.addRosterFromFile(filename)

(从您的示例中不清楚您是否真的需要sorted。如果您不需要按排序顺序迭代这些部分,请离开sorted。 )