Python字典列表如何将hours与payment相乘计算薪资并解决报错
问题复现
你当前定义的教师信息字典列表代码如下:
teachers = [ {'Name':'Mahdi Valikhani', 'phoneN':'+989012345679', 'hours':6, 'payment':50000, 'salaries':[2]*[3]}, {'Name':'Ali Afaghi', 'phoneN':'+989011234567', 'hours':8, 'payment':45000}, {'Name':'Hossein Alizadeh', 'phoneN':'+989011234867', 'hours':8, 'payment':45000}, ]
需求为遍历列表,将每个字典内hours与payment对应的值相乘得到薪资salary,执行乘法操作时触发类型错误,提示无法完成字符串与整数的乘法运算。
错误原因
代码存在两处问题:
- 首个字典中的
'salaries':[2]*[3]存在语法错误:Python列表乘法要求右侧乘数必须为整数,[3]是列表类型,单独执行这行就会抛出can't multiply sequence by non-int of type 'list'错误。如果要生成长度为3、元素全为2的列表,正确写法为[2]*3。 - 触发字符串与整数乘法报错的核心原因:实际运行环境中,
hours或payment字段至少有一个被存储为字符串格式(常见于从文本、接口、表格读取数据时未做类型转换,数值字段被默认解析为字符串),两种不同类型的值无法直接做数值乘法。
修复方案
计算前先对两个字段做强制整数类型转换,从根源避免类型不匹配问题,可直接运行的完整代码如下:
# 先修正原代码中salaries字段的语法错误 teachers = [ {'Name':'Mahdi Valikhani', 'phoneN':'+989012345679', 'hours':6, 'payment':50000, 'salaries':[2]*3}, {'Name':'Ali Afaghi', 'phoneN':'+989011234567', 'hours':8, 'payment':45000}, {'Name':'Hossein Alizadeh', 'phoneN':'+989011234867', 'hours':8, 'payment':45000}, ] # 遍历计算每个教师的薪资 for teacher in teachers: # 强制将两个字段转为整数,兼容字段为字符串格式的场景 hours = int(teacher['hours']) payment_per_hour = int(teacher['payment']) teacher['salary'] = hours * payment_per_hour
运行后每个教师字典会新增salary字段,对应计算结果:
- Mahdi Valikhani:
300000 - Ali Afaghi:
360000 - Hossein Alizadeh:
360000
如果数据源中可能存在空值、非数字格式的脏数据,可以在类型转换外层加try-except异常捕获,避免单条数据异常导致整个程序中断。
内容的提问来源于stack exchange,提问作者EMVI
相关产品推荐
相关产品推荐

