Python字典-调用定义
因此,我的目标是拿出三本字典,以这种格式打印出来: 姓名:“姓名” 作业:“名单平均数” 测验:“名单平均数” 测试:“列表的平均值” 我把这三本字典都列在一个列表里,我很难找到它们。我想一步一步地走 因此,在查看此代码之后:Python字典-调用定义,python,function,dictionary,key,definition,Python,Function,Dictionary,Key,Definition,因此,我的目标是拿出三本字典,以这种格式打印出来: 姓名:“姓名” 作业:“名单平均数” 测验:“名单平均数” 测试:“列表的平均值” 我把这三本字典都列在一个列表里,我很难找到它们。我想一步一步地走 因此,在查看此代码之后: lloyd = { "name": "Lloyd", "homework": [90.0, 97.0, 75.0, 92.0], "quizzes": [88.0, 40.0, 94.0], "tests": [75.0, 90.0] }
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]
def compute_grades(ourstudents):
for student in ourstudents:
print "Name: " + student["name"]
print "Homework: ", sum(student["homework"]) / len(student["homework"])
print "Quizzes: ", sum(student["quizzes"]) / len(student["quizzes"])
print "Tests: ", sum(student["tests"]) / len(student["tests"])
compute_grades(students)
有没有一种方法我可以只做一个基本的检查,这样就可以在任何字典上使用
例如
我基本上只是想将硬编码最小化,并提出一个更优雅的解决方案。感谢您的帮助 您可以这样做,但是根本没有错误检查或密钥排序:
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]
def average(data):
return sum(data) / float(len(data))
def compute_grades(students):
for student in students:
print('-'*23)
for key, value in student.items():
if isinstance(value, str):
formatted_value = value
else:
formatted_value = average(value)
print("%s: %s" % (key.title(), formatted_value))
compute_grades(students)
你可以把它包在试抓块里
def compute_grades(ourstudents):
for student in ourstudents:
for field, value in student.items():
try:
average=sum(value)/float(len(value))
print "{0}: {1}".format(field.title(), average)
except TypeError:
print "{0}: {1}".format(field.title(), value)
这似乎完美无瑕:
lloyd = {
"name": "Lloyd",
"performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"extra_credit": "OVER 9000!!!!",
"research": [16, 24, 56, 78, 23],
"missed_days": [1, 1, 2, 1],
"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]
def average(data):
return sum(data) / float(len(data))
def compute_grades(students):
for student in students:
print "-" * 15
print student["name"]
for key in student.keys():
if isinstance(student[key], str):
key_value = student[key]
else:
key_value = average(student[key])
if key != "name":
print("%s: %s" % (key.title(), key_value))
compute_grades(students)
lloyd = {
"name": "Lloyd",
"performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"extra_credit": "OVER 9000!!!!",
"research": [16, 24, 56, 78, 23],
"missed_days": [1, 1, 2, 1],
"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]
def average(data):
return sum(data) / float(len(data))
def compute_grades(ourstudents):
for student in ourstudents:
print "-" * 15
print student["name"]
for field, value in student.items():
try:
average=sum(value)/float(len(value))
print "{0}: {1}".format(field.title(), average)
except TypeError:
pass
compute_grades(students)
基于@septi输入和随机额外信息的测试,这似乎是完美的:
lloyd = {
"name": "Lloyd",
"performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"extra_credit": "OVER 9000!!!!",
"research": [16, 24, 56, 78, 23],
"missed_days": [1, 1, 2, 1],
"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]
def average(data):
return sum(data) / float(len(data))
def compute_grades(students):
for student in students:
print "-" * 15
print student["name"]
for key in student.keys():
if isinstance(student[key], str):
key_value = student[key]
else:
key_value = average(student[key])
if key != "name":
print("%s: %s" % (key.title(), key_value))
compute_grades(students)
lloyd = {
"name": "Lloyd",
"performance": [16.0, 19.0, 25.0, 14.4, 24.5, 16.2],
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"extra_credit": "OVER 9000!!!!",
"research": [16, 24, 56, 78, 23],
"missed_days": [1, 1, 2, 1],
"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]
def average(data):
return sum(data) / float(len(data))
def compute_grades(ourstudents):
for student in ourstudents:
print "-" * 15
print student["name"]
for field, value in student.items():
try:
average=sum(value)/float(len(value))
print "{0}: {1}".format(field.title(), average)
except TypeError:
pass
compute_grades(students)
基于@Kurtis输入和随机额外信息测试
len()
返回一个整数,您将遭受整数除法(舍入)。你觉得这样行吗?如果不这样做:float(len(item[“homography”]))
,然后将其转换为字符串。我正在尝试更大的思考,除了在字典中之外,不必定义“homography”或“tests”或“name”。打印时,您不必将所有内容转换为字符串并将其全部添加到一起。您可以编写print'作业:',123
,而不是print'作业:'+str(123)
。只需给print一些用逗号分隔的项目,它就会将所有内容转换为字符串,并自动在项目之间添加空格。那么为什么不使用Dictionary.keys()
?此外,列表不能是字典中的键(只是尝试了一下)。文档中说:字典是由键索引的,键可以是任何不可变的类型;字符串和数字始终可以是键。
。所以我认为你不必担心这一点。只是一个风格评论:我不会在我们的学生:中为项目编写,而是在我们的学生:
中为学生编写。这样,您就不必在代码后面猜测项是什么。在类似的情况下使用单数和复数确实有助于提高可读性,例如,对于行中的行:…
。先生,您完美地回答了我的问题。我想知道如何将所有内容都设置为变量,这样我就可以将任何字典传递给它。。。做得很好-甚至不需要解释。好极了!我会添加一个排序的student.keys(),因为顺序是不可预测的,否则就不客气了,Nicholas,尽管代码远不是优雅的;-)但它提供了一个可能的轮廓@XavierCombelle当然,还有更多需要调整的地方,正如我在帖子的第一行提到的(根据错误检查和排序)。非常有趣。。。我没有太多的时间来玩try-and-except,但它似乎是一个优雅的解决方案,可以解决我想要完成的任务。回答得好!我必须对此做更多的研究:-选择我已经接受的答案,不接受它而接受你的答案?好吧,doneOh,奇怪。。。老实说,我不知道那里发生了什么。我看到这里有些警觉。让我来修一下:-)我道歉。