我試圖用問題中的關鍵字搜索這個特定問題,但找不到一個好的解決方案。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 –
謝謝。你爲什麼試圖把一系列的字典變成字典?你如何期待這個工作,到底如何? –