2015-08-31 39 views
0

2個JSON文件的任何有效的方式我有相同結構的兩個JSON文件。將JSON條目未嵌套,並有字符串作爲鍵和整數作爲相應的值。我想連接並將兩個json文件保存到一個json文件中。它們中的一些鍵可能存在於這兩個文件中。在這種情況下,我需要在我的新json文件中添加這些值。有沒有來連接在python

我知道我能做到

import json 
#both values have integer as the values 
a = json.loads(open('js1.json').read()) 
b = json.loads(open('js2.json').read()) 
c = a.copy() 
for item in b.keys(): 
    try: 
    c[item] += b[item] 
    except: 
    c[item] = b[item] 

f = open('newjs.json','w') 
json.dumps(c,f) 

在這裏,我同時裝入JSON成單獨的字典,然後寫入相同到anotehr字典以下。在內存和速度方面是否還有其他有效的方法來實現?

+3

對於初學者來說,'C = a.copy'你的第一環,而不是()。但是,爲什麼用複印件打擾*所有*在這裏,因爲它什麼都無所謂了''貌似後來呢? –

+2

以及如何合併兩個詞典完全取決於它們的結構。有嵌套字典或列表嗎?對於相同的鍵,數字和布爾值,字符串值會發生什麼變化? –

回答

3

就合併兩個類型的字典,這就是它 -

import json 
a = json.loads(open('js1.json').read()) 
b = json.loads(open('js2.json').read()) 

def combine_dicts(*dicts): 
    return reduce(lambda dict1, dict2: dict(zip(dict1.keys() + dict2.keys(), dict1.values() + dict2.values())), dicts) 

c = combine_dicts(a, b) 
+1

在OP的代碼我認爲,{A:1,B:1} + {B:1,C:1} {==一個:1,B:2,C:1}。您的解決方案將無法工作,因爲字典(郵政編碼(...))將只保留每個公共密鑰的最後一個值。 – Eloims