使用循环来简化了Python Dictonaries
问题描述:
我正在自学Python和我一直在使用Codecademy网站作为一个工具。我理解某些键的字典编写的基本前提,但我意识到增加键使用循环会更容易词典,特别是如果你不得不稍后修改代码,每个词典有相同的值。但是,我不能让我的代码返回我想要的值:使用循环来简化了Python Dictonaries
students = {"lloyd" : [], "alice" : [], "tyler" : []}
for student in students:
student = {
"name" : [],
"homework" : [],
"quizzes" : [],
"tests" : []
}
print students
但这返回:
{'tyler': [], 'lloyd': [], 'alice': []}
None
我将如何对此进行设置,使... ...它实际工作和我有“名”,“功课”,根据学生的名字“试验”和“问答”呢?
答
首先,你是不是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
答
问题是,您正在重新分配循环中的student
变量,但原始字典保持不变。 如果你想使用此类型的字典,规范的方式做这将是生成使用工厂函数模板的字典,然后在创建你的学生字典用它来。
def make_student(name)
return {
"name" : name,
"homework" : [],
"quizzes" : [],
"tests" : []
}
students = {name : make_student(name) for name in ['lloyd', 'alice' 'tyler']}
print(students)
这就是说,最好还是做一个类(根据其他答案)。
您的代码不会改变'students'字典的内容,它只是分配一个整体的其他字典的每个密钥的副本发现它不完成andything - 这样解释的第一线输出。不确定其上有“无”的第二行来自哪里... – martineau