2015-09-25 80 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) 

這就是說,最好還是做一個類(根據其他答案)。