【发布时间】:2021-09-05 23:36:33
【问题描述】:
我有一个用 JSON 序列化的 python 类。
import json
class Data:
def __init__(self):
self.ival = 45
self.fval = 0.5
self.str = 'A string'
def save(self, filename):
with open(filename, 'w') as dfile:
jstr = json.dumps(self.__dict__)
dfile.write(jstr)
def load(self, filename):
with open(filename, 'r') as dfile:
jstr = dfile.read()
jdict = json.loads(jstr)
# Save what is currently there
jsave = self.__dict__
# Restore the old stuff
self.__dict__ = jdict
# Restore the original stuff
for member in jsave.keys():
if not member in jdict:
self.__dict__[member] = jsave[member]
def scramble(self):
self.ival = 99
self.fval = 3.162
self.str = 'another'
dfilename = './data.json'
dobj = Data()
dobj.save(dfilename)
一段时间后,我为类添加了另一个值
class Data:
def __init__(self):
...
self.itwo = 2
...
dfilename = './data.json'
dobj = Data()
dobj.load(dfilename)
print(dobj.itwo)
这似乎有效。
问题是,这是恢复字典的最佳方式吗?我希望恢复存在的价值,但保留不存在的价值。除了像我所做的那样一次通过一个键之外,还有更好的方法来合并字典吗?
【问题讨论】:
-
您在寻找
dict.update吗? -
是的 - dict.update 正是我正在寻找的。真的应该阅读文档。将代码替换为 self.__dict__.update(jdict) 并且可以正常工作。如果你想写出来作为答案,我会接受。
标签: python