Python实现字典回合分数平均值函数遇报错,如何解决?
解决Python计算多回合分数平均分的类型错误问题
你遇到的TypeError是因为dictionary.values()返回的是列表的集合,而sum()函数默认从整数0开始累加,尝试把0和列表相加自然会触发类型不兼容的错误——Python没法直接把整数和列表做加法运算。
要计算所有回合的平均分,你需要先把所有回合里的单个分数都提取出来,计算所有分数的总和以及分数的总个数,再用总分除以总个数得到结果。
方法一:用生成器表达式简洁实现
def find_average(dictionary): # 遍历所有回合的分数列表,累加单个分数得到总分 total_score = sum(score for round_list in dictionary.values() for score in round_list) # 累加每个回合的分数数量,得到总个数 total_count = sum(len(round_list) for round_list in dictionary.values()) # 处理空字典的边界情况,避免除以0错误 return total_score / total_count if total_count != 0 else 0.0
测试示例输入:
>>> find_average({'round 1': [1, 2, 3, 4], 'round 2': [3, 4, 2, 7], 'round 3': [2, 7, 5, 6]}) 4.8
方法二:用列表合并直观实现
如果你觉得生成器表达式不够直观,也可以先把所有分数合并到一个列表中再计算:
def find_average(dictionary): all_scores = [] # 将每个回合的分数列表合并到总列表 for scores in dictionary.values(): all_scores.extend(scores) # 计算平均分,空列表时返回0.0 return sum(all_scores) / len(all_scores) if all_scores else 0.0
内容的提问来源于stack exchange,提问作者maria
相关产品推荐
相关产品推荐

