我试着将martineau solution in this post应用到一个稍微不同的情况下,但似乎由于某些模糊的原因(至少对我来说),自定义编码器并没有从json. dump()方法调用.
from collections.abc import MutableMapping
import json
import numpy as np
class JSONSerializer(json.JSONEncoder):
def encode(self, obj):
# Convert dictionary keys that are tuples into strings.
if isinstance(obj, MutableMapping):
for key in list(obj.keys()):
if isinstance(key, tuple):
strkey = "%d:%d" % key
obj[strkey] = obj.pop(key)
return super().encode(obj)
class Agent(object):
def __init__(self, states, alpha=0.15, random_factor=0.2):
self.state_history = [((0, 0), 0)] # state, reward
self.alpha = alpha
self.random_factor = random_factor
# start the rewards table
self.G = {}
self.init_reward(states)
def init_reward(self, states):
for i, row in enumerate(states):
for j, col in enumerate(row):
self.G[(j,i)] = np.random.uniform(high=1.0, low=0.1)
def memorize(self):
with open("memory.json", "w") as w:
json.dump(self.G, w, cls=JSONSerializer)
if __name__ == "__main__":
robot = Agent(states=np.zeros((6, 6)), alpha=0.1, random_factor=0.25)
print(robot.G)
robot.memorize()
当测试字符串编码时,它似乎返回了我所期望的,但是当调用json.dump时,定制编码器似乎根本没有被调用.你知道为什么吗?
谢谢