Python:给定字典列表,如果键不存在,则基于键返回值的平均值,则返回无



我正在开发一个函数,该函数将字典列表和所需年份作为输入。该功能将检查所需年份(关键字(是否存在,如果存在,它将计算该关键字的平均绩点。如果想要的年份不存在,它将一无所获。我目前在处理确实存在的密钥时遇到了问题,但不确定如何返回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

最新更新