我正在上传此dictionary
:
p1 = {'user1': {u'Codex': 1.0, u'Pyramid Song': 1.0, u'Hey': 1.0}}
进入我的dir path
:
if os.path.exists('db/user1.json'):
with open('user1.json', 'r+') as f:
db = p1
db = json.load(f)
# increment track count
updateTrackCounts(p1,value=1.0)
#update json here
f.seek(0)
f.truncate()
json.dump(p1, f)
我有这个更新功能:
def updateTrackCounts(d, value=0):
for i in d:
if isinstance(d[i], dict):
updateTrackCounts(d[i], value)
elif isinstance(d[i], float):
d[i] += value
但如果我上传其他dict
,请说:
p2 = {'user1': {, u'NEW :1.0, u'Codex': 1.0, u'Pyramid Song': 1.0, u'Hey': 1.0}}
我最终得到了:
output = {'user1': {u'Codex': 2.0, u'Pyramid Song': 2.0, u'Hey': 2.0}}
而非期望:
output = {'user1': {, u'NEW :1.0, u'Codex': 2.0, u'Pyramid Song': 2.0, u'Hey': 2.0}}
我在这里缺少什么?
答案 0 :(得分:0)
您实际上并未更新从文件加载的对象。名称引用不会向后指向,一旦将名称重新绑定到新对象,前一个对象不会受到通过旧引用执行的任何操作的影响。
变化:
db = p1 = json.load(f)
要:
db = p1
p1 = json.load(f)
或者,如果需要,可以使用db来保留对前一个对象的引用:
{{1}}