我试图用问题中的关键字搜索这个特定问题,但找不到一个好的解决方案。Python - 结合n个不同的json文件/字典(n可能有所不同)
说我有JSON文件列表(让我们假设顶层始终将是一个字典):
"../data/Flickr_EXIF_0.json",
"../data/Flickr_EXIF_150.json",
"../data/Flickr_EXIF_300.json",
"../data/Flickr_EXIF_450.json",
的问题是合并/合并所有JSON文件合并成一个单一的文件。
这将是当然简单的事,鉴于我们知道我们有多少JSON文件合并一样,
with open("../data/Flickr_EXIF_0.json", "r") as jFl:
obj1 = json.load(jFl)
with open("../data/Flickr_EXIF_150.json", "r") as jFl:
obj2 = json.load(jFl)
with open("../data/Flickr_EXIF_300.json", "r") as jFl:
obj3 = json.load(jFl)
with open("../data/Flickr_EXIF_450.json", "r") as jFl:
obj4 = json.load(jFl)
d = {**obj1, **obj2, **obj3, **obj4}
但你怎么会说写,可以结合未知数量JSONs的功能。我正在寻找pythonic解决方案。
这是我的部分解决方案,其会引发错误:
def appendJSON(*inpFl):
flObjs = []
for fl in inpFl:
with open(fl, "r") as jFl:
flObjs.append(json.load(jFl))
# something smart here!
itemsList = [list(objs.items()) for objs in flObjs]
return dict(itemsList)
错误:itemsList
ValueError Traceback (most recent call last) in() 20 "../data/Flickr_EXIF_1350.json", 21 "../data/Flickr_EXIF_1500.json", ---> 22 "../data/Flickr_EXIF_1650.json")
in appendJSON(*inpFl) 7 itemsList = [objs.items() for objs in flObjs] 8 ----> 9 return dict(itemsList) 10 11 objs = appendJSON("../data/Flickr_EXIF_0.json",
ValueError: dictionary update sequence element #0 has length 150; 2 is required
样品调试值:
[[('5822864395',
{'date': '2010-06-10 14:48:25',
'height': 2592,
'lat': 0.0,
'long': 0.0,
'orientation': 0,
'width': 2818}),
('1458886548',
{'date': '2007-09-22 02:59:20',
'height': 768,
'lat': 39.145372,
'long': -84.508981,
'orientation': 0,
'width': 1024})]]
备用溶液,
def appendJSON(*inpFl):
flObjs = []
for fl in inpFl:
with open(fl, "r") as jFl:
flObjs.append(json.load(jFl))
for i in range(1,len(flObjs)):
flObjs[0].update(flObjs[i])
return flObjs[0]
你打算跟我们分享这个错误吗? –
哦,当然。对于那个很抱歉! @DanFarrell –
谢谢。你为什么试图把一系列的字典变成字典?你如何期待这个工作,到底如何? –