2015-09-25 73 views
0

我正在自学Python和我一直在使用Codecademy网站作为一个工具。我理解某些键的字典编写的基本前提,但我意识到增加键使用循环会更容易词典,特别是如果你不得不稍后修改代码,每个词典有相同的值。但是,我不能让我的代码返回我想要的值:使用循环来简化了Python Dictonaries

students = {"lloyd" : [], "alice" : [], "tyler" : []} 

for student in students: 
    student = { 
     "name" : [], 
     "homework" : [], 
     "quizzes" : [], 
     "tests" : [] 
    } 

print students 

但这返回:

{'tyler': [], 'lloyd': [], 'alice': []} 
None 

我将如何对此进行设置,使... ...它实际工作和我有“名”,“功课”,根据学生的名字“试验”和“问答”呢?

+1

您的代码不会改变'students'字典的内容,它只是分配一个整体的其他字典的每个密钥的副本发现它不完成andything - 这样解释的第一线输出。不确定其上有“无”的第二行来自哪里... – martineau

回答

6

首先,你是不是return荷兰国际集团任何东西。其次,您将覆盖“学生”变量,并且永远不会保存您创建的值。你应该跟踪,或修改字典,当您去:

students = {"lloyd" : [], "alice" : [], "tyler" : []} 

for student in students: 
    students[student] = { # Notice the change here 
     "name" : [], 
     "homework" : [], 
     "quizzes" : [], 
     "tests" : [] 
    } 

print students 

Python支持类这样的事情,太,虽然你可能不会得到你的教程的那部分尚未:

class Student: 
    def __init__(self): 
     self.tests = [] 
     self.quizzes = [] 
     self.name = "" 
     self.homework = [] 

然后你就可以有一个学生相关的某些行为:

def hw_average(self): 
     return sum(self.homework)/len(self.homework) # divide by zero if no homework, so don't actually do this. 

然后你就可以与学生互动:

jeff = Student() 
jeff.name = "Jeff" 
jeff.homework = [85, 92, 61, 78] 
jeff.hw_average() # 79 
1

问题是,您正在重新分配循环中的student变量,但原始字典保持不变。 如果你想使用此类型的字典,规范的方式做这将是生成使用工厂函数模板的字典,然后在创建你的学生字典用它来。

def make_student(name) 
    return { 
    "name" : name, 
    "homework" : [], 
    "quizzes" : [], 
    "tests" : [] 
    } 

students = {name : make_student(name) for name in ['lloyd', 'alice' 'tyler']} 
print(students) 

这就是说,最好还是做一个类(根据其他答案)。