Python计算字典值平均值时sum报TypeError:int与str无法相加问题求解
错误原因
- 报错
TypeError: unsupported operand type(s) for +: 'int' and 'str'是因为传入的评分列表中同时存在整数类型和字符串类型的评分值,比如[3, "2", 4, "5"],sum()函数累加时无法处理两种不同类型的值相加,因此触发类型错误。
修复方案
有两种修复方式,可根据场景选择:
方式1:统一转换评分类型(适合所有评分值本身是数字格式的字符串场景)
修改函数,先将所有评分统一转为浮点型再计算平均值,修改后代码如下:
def calculate_average_rating(input): final = {} for key in input.keys(): # 所有评分转成浮点型,消除类型差异 ratings = [float(r) for r in input[key]] avg = sum(ratings)/len(ratings) final[key] = avg return final
方式2:增加异常兼容逻辑(适合存在无效非数字评分的场景)
如果无法保证输入的评分都是有效数字,可以增加校验逻辑,过滤无效值同时避免空列表除零错误:
def calculate_average_rating(input): final = {} for key in input.keys(): valid_ratings = [] for r in input[key]: # 尝试转成浮点型,转换失败则跳过该评分 try: valid_ratings.append(float(r)) except (ValueError, TypeError): continue if len(valid_ratings) == 0: # 无有效评分时返回None,可根据需求调整默认值 final[key] = None else: avg = sum(valid_ratings)/len(valid_ratings) final[key] = avg return final
两种修复方式都可以兼容你的示例输入,输入{"Spider-Man (2002)": [3,2,4,5]}或混有字符串评分的{"Spider-Man (2002)": [3,"2","4",5]}时,都能正常返回{"Spider-Man (2002)": 3.5}。
内容的提问来源于stack exchange,提问作者aflsjd
相关产品推荐
相关产品推荐

