Python报错:unsupported operand type(s) for -: 'dict' and 'int' 求助
错误原因解析
报错TypeError: unsupported operand type(s) for -: 'dict' and 'int'的核心问题是:你直接对字典task_duration执行减法运算(task_duration-1),字典和整数不支持这类操作。你需要先根据对应的键提取字典中的数值,再进行整数运算。
此外代码还有两处隐性问题:
- 嵌套字典
u未初始化,直接赋值u[r][i]会触发KeyError - 后续循环中的元组(如
(EAF,EAs))里的元素是未定义变量,需改为字符串形式(如("EAF","EAs")) - 部分资源/任务键不在
task_duration字典中,需要处理键不存在的情况
修正后的代码示例
# 初始化嵌套字典u u = {} r_list = ["EAF","AOD","LF","EAs","EAd","ALs","ALd","LCs","LCd","H"] # 资源集合 i_list = ["E","A","L","EA","AL","LC"] # 任务集合 t = [1,2,3,4,5,6,7,8,9,10,11,12] # 时隙数量 Hour=2 Price = {'Hour1': 100 ,'Hour2': 200} R= {'EAF':2,'AOD':2,'LF':2,'EAs':1,'EAd':1,'ALs':1,'ALd':1,'LCs':1,'LCd':1,'H':1} # 资源键值对 N = {'E':1 , 'A' : 1 , 'L' : 1 , 'EA' : 1, 'AL' :1, 'LC' :1 } # 任务键值对 # 任务时长字典 task_duration={'EAF':5 , 'AOD': 4 ,'LF': 1, 'EA':1, 'AL':1, 'LC':1} # 先初始化u的层级结构 for r in R: u[r] = {} for i in N: u[r][i] = [] # 设备使用逻辑 for r in R : for i in N: # 优先按资源取时长,没有则按任务取,默认值设为1 duration = task_duration.get(r, task_duration.get(i, 1)) u[r][i] = [-1] + [0]*(duration-1) + [1] # 转移前逻辑 for i,r in [("EAF","EAs"),("AOD","ALs"),("LF","LCs")]: duration = task_duration.get(i, 1) u[r][i] = [0] + [0]*(duration-1) + [1] # 转移后逻辑 for i,r in [("AOD","EAd") ,("LF","ALd")]: duration = task_duration.get(i, 1) u[r][i] = [-1] + [0]*(duration-1) + [0] # 转移任务:转移前 for i,r in [("EA","EAs"),("AL","ALs"),("LC","LCs")]: duration = task_duration.get(i, 1) u[r][i] = [-1]*duration # 转移任务:转移后 for i,r in [("EA","EAd"),("AL","ALd"),("LC","LCd")]: duration = task_duration.get(i, 1) u[r][i] = [1]*duration
关键修正说明
- 提前初始化嵌套字典
u,确保每个u[r][i]都有可赋值的容器 - 使用
task_duration.get(key, 默认值)安全获取时长,再执行duration-1的整数运算 - 将所有元组内的元素改为字符串,避免未定义变量错误
- 对不在
task_duration中的键设置默认值,防止KeyError
内容的提问来源于stack exchange,提问作者Margi Shah
相关产品推荐
相关产品推荐

