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

Properly looping over a dictionary / using dictionaries as databases

这看起来像 CS 101 风格的作业,但实际上不是。我想学习更多 python 所以我开始了这个个人项目来编写一个小应用程序来保存我的成绩簿。

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

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

现在我已将 semestersections 成员更改为字典,这样我就可以查找要使用的特定字典,但是当我想遍历所有的字典时遇到了麻烦他们做一些事情,比如当我第一次设置一个新学期时,我想添加所有的部分,然后遍历它们并为每个部分添加学生。如果我尝试使用相同的代码遍历字典,它会给我密钥,但我希望得到值。

我也试过像这样迭代字典,这是我从 older stack over flow question

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

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

目前我有这个修复程序,我循环访问键,然后使用键访问值,如下所示:

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

必须有一种循环遍历字典值的方法,或者这是不可取的?我对字典的理解是,它们就像列表,但它不是通过元素的位置来获取元素,而是有一个特定的键,这使得无论它们的顺序如何,都可以更容易地获取你想要的元素。我是否错过了字典应该是怎样的用过的?

使用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 留在外面。)