繁体   English   中英

关键错误:0 Python

[英]KeyError: 0 Python

嗨,我对 python 还是很陌生,想知道为什么会出现这一行:

    RP[p][t] = demand[p][t] / fillingrate[p]

导致错误:KeyError: 0

它遵循代码的相关部分。 这只是符号错误还是解决它的最佳方法?

productname = ('milk', 'yoghurt', 'buttermilk')
fillingrate = (1.5, 1.0, 2.0)

day = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)

demand = [
(5, 4, 3, 3, 4, 9, 13, 5, 4, 4, 3, 5, 10, 12),
(3, 5, 3, 5, 5, 4,  3, 4, 3, 4, 3, 4,  5,  5),
(3, 3, 5, 4, 4, 5,  4, 3, 4, 3, 4, 5,  4,  5)
]

T = range (len(day))
P = range (len(productname))


for p in P:
   for t in T:
        RP[P,T] = model.addVar (lb = 0, vtype = GRB.CONTINUOUS,
        name = 'Regular Production[' + str(p) + ',' + str(t) + ']')
        print(demand[p][t])
        print(fillingrate[p])
        RP[p][t] = demand[p][t] / fillingrate[p]
        print(RP[p][t])

通过[x, y]进行索引与通过[x][y]索引绝对不同 前者导致使用元组索引的单个维,而后者导致参差不齐的二维数组。

您将需要在索引[x]处创建一个包含所需值的新对象。

表达式Pp 在您的代码中,第一个是范围,第二个是该范围的整数。

因此,表达式RP[P,T]有两种错误的方式:它使用错误的下标,并以错误的方式组合它们(如另一个答案所指出)。

我认为您要使用RP[p][t]

keyerror: 0通常意味着您正在尝试访问存储在字典中不存在的键0中的值。

在您的代码中,它发生是因为

day = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
T = range (len(day))

你得到

print(T)
 range(0, 14)

所以它的第一个元素是0
当你运行这个

for p in P:
   for t in T:
        RP[P,T] = model.addVar (lb = 0, vtype = GRB.CONTINUOUS,
        name = 'Regular Production[' + str(p) + ',' + str(t) + ']')
        print(demand[p][t])

你知道t得到的第一个值是0 ,然后你将该t传递给字典demand ,它没有键0 ,我猜在那里出现了keyerror: 0

此外,正如其他问题所指出的,您应该注意到

[x, y] 索引与 [x][y] 索引绝对不同 前者产生使用元组索引的单维,而后者产生参差不齐的二维数组。

为了帮助您修复代码,了解RP是如何定义的可能会很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM