我构建了一个3D数组self.QL={}
用0来“擦除”数组:
for loop0 in range(50):
for loop1 in range(50):
for loop2 in range(self.actions):
self.QL[loop0, loop1, loop2] = 0
但是当我运行程序并尝试从数组中获取值时,它会出现错误:
File "Bots/QL.py", line 135, in _chooseaction
self.vQ = self.QL[state[0],state[1],a]
KeyError: (0, 63, 0)
在第135行我有:
def _chooseaction(self, state):
self.vQ = 0
self.action = 0
self.temp = -1000
for a in range(self.actions):
self.vQ = self.QL[state[0],state[1],a]
if self.vQ > self.temp:
self.temp=self.vQ
self.action=a
return self.action
我做错了什么?
答案 0 :(得分:2)
state[1]
的值为63,但您只使用0到49之间的值初始化它。
这就是为什么它说密钥(0,63,0)不存在。
也许你可以使用defaultdict?
from collections import defaultdict
self.QL = defaultdict(int)
现在,self.QL基本上是一个dict,对于它没有的任何值都是0。