2016-11-11 14 views
0

私はこのdictionaryをアップロードしていますが、更新されていないPythonの辞書ファイルは

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)をアップロードします(例:

)。

output = {'user1': {u'Codex': 2.0, u'Pyramid Song': 2.0, u'Hey': 2.0}} 

代わりの希望:私はで終わる

p2 = {'user1': {, u'NEW :1.0, u'Codex': 1.0, u'Pyramid Song': 1.0, u'Hey': 1.0}} 

output = {'user1': {, u'NEW :1.0, u'Codex': 2.0, u'Pyramid Song': 2.0, u'Hey': 2.0}} 

は、私はここで何をしないのですか?

答えて

0

ファイルから読み込んだオブジェクトを実際に更新しているわけではありません。名前参照は逆方向を指しません。名前を新しいオブジェクトに再バインドすると、以前のオブジェクトは古い参照を介して実行されるアクションの影響を受けません。

変更:

db = p1 
db = json.load(f) 

へ:

db = p1 = json.load(f) 

それとも、あなたは両方が必要な場合は、前のオブジェクトへの参照を維持するために、DBを使用することができます。

db = p1 
p1 = json.load(f)