Python:字典到 Json 文件
Posted
技术标签:
【中文标题】Python:字典到 Json 文件【英文标题】:Python: Dictionary into Json file 【发布时间】:2017-03-25 03:50:18 【问题描述】:我有以下字典
a = 'index': [1, 2, 3], 'similar': [[0, 2], [1, 2], [2, 1]], 'markets': [['A', 'C'], ['B', 'C'], ['A', 'B']]
keys = ['index', 'similar', 'markets']
我希望它把它转换成一个 json 文件
喜欢
'index': 'elem1' , "similar" : [ 'elem0' 'elem2' ] , "markets" : ['marketA', 'marketC']
'index': 'elem2 , "similar" : [ 'elem1' 'elem2' ] , "markets" : ['marketB', 'marketC']
'index': 'elem3' , "similar" : [ 'elem2' 'elem1' ] , "markets" : ['marketA', 'marketB']
我现在有
with open('result.json', 'w') as fp:
json.dump(a, fp)
但我不确定如何获得理想的结果
任何帮助将不胜感激
【问题讨论】:
您的输出显示多个由换行符分隔的 json blob。因此,它不是“一个 json 文件”,而是“一个包含许多行分隔的 json 对象的文件”。那是你要的吗?如果是这样,您如何获得这些多个字典?您可以多次以附加模式打开文件或一次写入多个字典。 是的,我想要一个包含许多 json 对象的文件 好的,所以你想做一些转换。你应该向我们展示你到目前为止所做的事情,并且可能包括一些关于转换是什么的提示。 SO 通常不是代码编写服务。 【参考方案1】:您必须调整当前所需输出的结构。您的相似数组和市场数组包含集合 (['elem0', 'elem2' ]),这在 JSON 中当然是不可能的。
我已经为你编写了必要的代码。
import json
f = 'index': [1, 2, 3], 'similar': [[0, 2], [1, 2], [2, 1]], 'markets': [['A', 'C'], ['B', 'C'], ['A', 'B']]
res =
for k,v in f.iteritems():
for i, s_v in enumerate(v):
if not res.get(i):
res[i] =
if k == 'markets':
prefix = 'market'
else:
prefix = 'elem'
if isinstance(s_v, int):
res[i][k] = '%s%s' % (prefix, s_v)
else:
res[i][k] = [[]]
for _s_v in s_v:
res[i][k][0].append('%s%s' % (prefix, _s_v))
res[i][k][0] = res[i][k][0]
res = [v for k, v in res.iteritems()]
print json.dumps(res)
.. ["index": "elem1", "similar": [["elem0", "elem2"]], "markets": [["marketA", "marketC"]], "index": "elem2", "similar": [["elem1", "elem2"]], "markets": [["marketB", "marketC"]], "index": "elem3", "similar": [["elem2", "elem1"]], "markets": [["marketA", "marketB"]]]
【讨论】:
感谢您的建议,但它不会打印所需的输出。您的解决方案打印 "index": "elem1", "index": "elem2", "index": "elem3", "similar": [["elem0", "elem2"]] ,“相似”:[[“elem1”,“elem2”]],“相似”:[[“elem2”,“elem1”]],“市场”:[[“市场A”,“市场C "]], "markets": [["marketB", "marketC"]], "markets": [["marketA", "marketB"]]] 我已经更新了答案。请注意,您想要的输出不符合 JSON,JSON 不能保存元组/集合 (['elem1', 'elem2']) => 必须按以下方式输出: [['elem1', 'elem2 ']] 或者:['elem1', 'elem2'] 如果这样做,请将问题标记为正确。以上是关于Python:字典到 Json 文件的主要内容,如果未能解决你的问题,请参考以下文章
追加到 json 中转储的字典列表,而不用 python 加载列表