Python - 字典文件未更新

时间:2016-11-11 18:57:37

标签: python file dictionary

我正在上传此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}}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您实际上并未更新从文件加载的对象。名称引用不会向后指向,一旦将名称重新绑定到新对象,前一个对象不会受到通过旧引用执行的任何操作的影响。

变化:

db = p1 = json.load(f)

要:

db = p1
p1 = json.load(f)

或者,如果需要,可以使用db来保留对前一个对象的引用:

{{1}}