【问题标题】:Python: Dictionary into Json filePython:字典到 Json 文件
【发布时间】: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 通常不是代码编写服务。

标签: python json python-2.7 pandas dictionary


【解决方案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']
  • 如果这样做,请将问题标记为正确。
猜你喜欢
  • 2015-03-21
  • 2016-03-08
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 2018-01-11
  • 1970-01-01
相关资源
最近更新 更多