Mat*_*ape 3 python json dictionary
假设我有两个json文件.我希望能够加载两者,然后将第二个条目添加到第一个.这可能包括添加字段或列表条目.像下面的例子:
file1.json:{"fruit":[{"name":"apple","color":"red"},{"name":"orange","color":"orange"}]}
file2.json:{"fruit":[{"name":"strawberry","color":"red","size":"small"},{"name":"orange","size":"中等"}]}
结果:{"fruit":[{"name":"apple","color":"red"},{"name":"orange","color":"orange","size":"medium" },{"name":"strawberry","color":"red","size":"small"}]}
起初我想把它们加载到字典中并尝试更新:
import simplejson
filea = open("file1.json", 'r')
dicta = simplejson.loads(filea.read())
fileb = open("file2.json", 'r')
dictb = simplejson.loads(fileb.read())
filea.close()
fileb.close()
dicta.update(dictb)
Run Code Online (Sandbox Code Playgroud)
由于两个字典都有一个"水果"条目,我希望它们会合并,但它简单地用dictb中的条目覆盖了条目中的条目.
我意识到我可以编写代码来循环这个例子,但是我使用的实际文件要大得多,也要复杂得多.我想知道是否有一个图书馆在我重新发明轮子之前已经做过类似的事情了.对于它的价值,我使用的是Python 2.6.2.
感谢您的任何建议或意见!
您需要扩展列表检查每个值.Python现在你无法根据name词典项合并它们:
def merge(lsta, lstb):
for i in lstb:
for j in lsta:
if j['name'] == i['name']:
j.update(i)
break
else:
lsta.append(i)
for k,v in dictb.items():
merge(dicta.setdefault(k, []), v)
Run Code Online (Sandbox Code Playgroud)
所以dicta变量将是:
{'fruit': [{'color': 'red', 'name': 'apple'},
{'color': 'orange', 'name': 'orange', 'size': 'medium'},
{'color': 'red', 'name': 'strawberry', 'size': 'small'}]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16499 次 |
| 最近记录: |