You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,执行乘法操作时触发类型错误,提示无法完成字符串与整数的乘法运算。

错误原因

代码存在两处问题:

  1. 首个字典中的'salaries':[2]*[3]存在语法错误:Python列表乘法要求右侧乘数必须为整数,[3]是列表类型,单独执行这行就会抛出can't multiply sequence by non-int of type 'list'错误。如果要生成长度为3、元素全为2的列表,正确写法为[2]*3。
  2. 触发字符串与整数乘法报错的核心原因:实际运行环境中,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:54:28