如何计算Python字典中嵌套列表值的平均值?
解决嵌套列表字典的平均值计算问题
嘿,我来帮你搞定这个报错!你遇到的TypeError其实很好理解——你的字典里每个值都是两层嵌套的列表(比如[[9, 10, 9.5,...]]),直接用sum(dict1[key])的时候,Python会尝试把外层列表里的元素(也就是那个内层的评分列表)和整数相加,这显然是不支持的操作,所以就报错啦。
核心解决思路
我们需要先把内层的评分列表取出来(每个外层列表里只有这一个元素,所以用dict1[key][0]就能拿到),然后计算这个列表的总和,再除以列表的长度得到平均值。
修复后的循环代码
这是基于你原来的代码修改后的版本:
dict1 = { 'Monty Python and the Holy Grail': [[9, 10, 9.5, 8.5, 3, 7.5, 8]], "Monty Python's Life of Brian": [[10, 10, 0, 9, 1, 8, 7.5, 8, 6, 9]], "Monty Python's Meaning of Life": [[7, 6, 5]], 'And Now For Something Completely Different': [[6, 5, 6, 6]] } dict2 = {} for key in dict1: # 取出内层的评分列表 scores = dict1[key][0] # 计算平均值:总和除以评分数量 average = sum(scores) / len(scores) dict2[key] = average # 输出结果 print(dict2)
更简洁的字典推导式版本
如果你喜欢更紧凑的代码,可以用字典推导式一行搞定:
dict2 = {key: sum(scores[0]) / len(scores[0]) for key, scores in dict1.items()}
额外优化:处理空列表的情况
如果担心某些评分列表为空(避免出现除以0的错误),可以加个简单的判断:
dict2 = {} for key in dict1: scores = dict1[key][0] if not scores: average = 0.0 # 这里可以设置你想要的默认值,比如None或者0 else: average = sum(scores) / len(scores) dict2[key] = average
运行上面的代码后,你就能得到每个作品对应的评分平均值啦!
内容的提问来源于stack exchange,提问作者Christina
相关产品推荐
相关产品推荐

