我正在开发一个函数,该函数将字典列表和所需年份作为输入。该功能将检查所需年份(关键字(是否存在,如果存在,它将计算该关键字的平均绩点。如果想要的年份不存在,它将一无所获。我目前在处理确实存在的密钥时遇到了问题,但不确定如何返回none/处理不存在密钥的实例。对于高年级学生,它正确计算了所有高年级学生的平均值,但不确定如何处理不存在低年级学生的第二个函数调用。
Output for senior is correct: 2.19
However it should return none for junior.
将avg
计算移出循环(每次迭代无需计算(,并检查year
是否为空,如果为空则返回None:
def avgGpa(studentDic, desiredYear):
year = []
for value in studentDic:
if value['year'] == desiredYear:
year.append(value)
if len(year) == 0:
return None
avg = sum(value['GPA'] for value in year) / len(year)
return avg
另一个解决方案,使用statistics.mean
:
from statistics import mean, StatisticsError
student_data = [
{"id": 0, "year": "freshman", "GPA": 0.03},
{"id": 1, "year": "senior", "GPA": 0.7},
{"id": 2, "year": "senior", "GPA": 2.77},
{"id": 3, "year": "sophomore", "GPA": 1.1},
{"id": 4, "year": "sophomore", "GPA": 1.05},
{"id": 5, "year": "freshman", "GPA": 0.43},
{"id": 6, "year": "senior", "GPA": 3.1},
]
def avgGpa(studentDic, desiredYear):
try:
return mean(d["GPA"] for d in studentDic if d["year"] == desiredYear)
except StatisticsError:
pass
print(avgGpa(student_data, "senior"))
print(avgGpa(student_data, "junior"))
打印:
2.19
None