2013-07-19 36 views
0

我想学习与codeacademy python。 这项任务是制作3本字典(每个学生),然后列出3本字典。那么,我应该打印列表中的所有数据。如何从字典列表中调用字典值?

我试图用自己的字典(lloyd [values])用同样的方式调出这些值,但之后它表示值没有被定义为o_O。我也尝试'打印姓名',但是错误信息是我没有打印出其中的一个值。

非常感谢您的帮助。

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 names in students: 
    print lloyd[values] 
+2

'values' is not defined;它不是你可以传递给'lloyd [']'的变量。你的意思是'names.values()'而不是? –

回答

3

如果你想打印为每一个学生的所有信息,你必须遍历所有的学生和值存储在词典:

students = [lloyd, alice, tyler] 
for student in students: 
    for value in student: 
     print value, "is", student[value] 

但是,请注意,字典没有排序,所以值的顺序可能不是您想要的方式。在这种情况下,单独打印出来,使用值的名字作为一个字符串键:

for student in students: 
    print "Name is", student["name"] 
    print "Homework is", student["homework"] 
    # same for 'quizzes' and 'tests' 

最后,您还可以使用pprint模块“漂亮打印”学生字典:

import pprint 
for student in students: 
    pprint.pprint(student) 
+0

+1对于pprint很有用 –

0

所以students是词典的列表。然后你要

for student in students: 
    print student['name'] 

而且当你要调用你必须把钥匙在引号字典的关键,作为一个字符串:alice[homework]不起作用因为Python认为homework是一个变量。您需要改为alice['homework']

所以要考虑所有的信息很好,你可以做

for student in students: 
    for field in student.keys(): 
     print "{}: {}".format(field, student[field]) 

可以随意修改,使格式更好,例如打印的名头,将每个新学生之间的新线等

+0

我不认为这就是他要问的。 –

2

你可以简单地打印值的类型的字典:

for names in students: 
    print names #names are the dictionaries 

如果你想打印只是名字,然后用name关键:

for student in students: 
    print student['name'] 
2

我会建议使用namedtuple代替了可读性和可扩展性:

from collections import namedtuple 

Student = namedtuple('Student', ['name', 'hw', 'quiz', 'test']) 

Alice = Student('Alice', herHWLst, herQuizLst, herTestLst) 
Ben = Student('Ben', hisHWLst, hisQuizLst, hisTestLst) 

students = [Alice, Ben] 

for student in students: 
    print student.name, student.hw[0], student.quiz[1], student.test[2] 
    #whatever value you want 

如果你真的想创建吨字典,你可以读它的机智^ h代码上面的:

for student in students: 
    name = student['name'] 
    homeworkLst = student['homework'] 
    # get more values from dict if you want 
    print name, homeworkLst 

访问字典是Python中的超级快,但他们创造可能不会像快速和有效的。在这种情况下,命名元组更实用。

0

这就是我在codeacademy上解决我的问题。希望有人认为学生在学生这是很有帮助的 :

print student['name'] 
print student['homework'] 
print student['quizzes'] 
print student['tests'] 
0

这是我让他们接受。

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

这也行得通,但他们不会接受。

for name in students: 
    print name