1

我执行了这个片段:

lloyd = {
    "name": "Lloyd",
    "homework": [90.0, 97.0, 75.0, 92.0],
    "quizzes": [ 88.0, 40.0, 94.0],
    "tests": [75.0, 90.0]
}
alice = {
    "name": "Alice",
    "homework": [100.0, 92.0, 98.0, 100.0],
    "quizzes": [82.0, 83.0, 91.0],
    "tests": [89.0, 97.0]
}
tyler = {
    "name": "Tyler",
    "homework": [0.0, 87.0, 75.0, 22.0],
    "quizzes": [0.0, 75.0, 78.0],
    "tests": [100.0, 100.0]
}

students=[lloyd, alice, tyler]

for i in students:
    for f in i:
        print i[f]

我不明白为什么输出是下一个:

[88.0, 40.0, 94.0]
[75.0, 90.0]
Lloyd
[90.0, 97.0, 75.0, 92.0]
[82.0, 83.0, 91.0]
[89.0, 97.0]
Alice
[100.0, 92.0, 98.0, 100.0]
[0.0, 75.0, 78.0]
[100.0, 100.0]
Tyler
[0.0, 87.0, 75.0, 22.0]

为什么会这样?我在哪里可以找到相关文档?有人可以给我简要解释一下输出的逻辑吗?

4

3 回答 3

6

字典键没有定义的顺序。{'a':1,'b':2}并且{'b':2,'a':1}被认为是相等的,并且它们以相同的方式打印出来:

>>> {'a':1, 'b':2}
{'a': 1, 'b': 2}
>>> {'b':2, 'a':1}
{'a': 1, 'b': 2}

另请注意,根据您自己的经验,您不能假设它们会按字母顺序出现。

于 2013-07-13T09:28:43.090 回答
6

常规字典不排序。

最好将字典视为一组无序的键:值对

资源

如果您真的需要有序字典,请查看OrderedDict

于 2013-07-13T09:29:31.473 回答
2

您可以通过更改循环轻松解决此问题:

for student in students:
    for key in ["name", "homework", "quizzes", "tests"]:
        print student[key]

Namedtuples 在这里可能是一个更好的匹配:

from collections import namedtuple
Student = namedtuple('Student', ["name", "homework", "quizzes", "tests"])

students = [
    Student(name="Lloyd",
            homework=[90.0, 97.0, 75.0, 92.0],
            quizzes=[ 88.0, 40.0, 94.0],
            tests=[75.0, 90.0])
    Student(name="Alice",
            homework=[100.0, 92.0, 98.0, 100.0],
            quizzes=[82.0, 83.0, 91.0],
            tests=[89.0, 97.0])
    Student(name="Tyler",
            homework=[0.0, 87.0, 75.0, 22.0],
            quizzes=[0.0, 75.0, 78.0],
            tests=[100.0, 100.0])
]
于 2013-07-13T10:06:14.707 回答