使用Python将原始列表转换为JSON数据

时间:2016-08-30 23:20:24

标签: python json

我有以下形式的原始列表sorteddict

["with", 1]
["witches", 1]
["witchcraft", 3]

我希望通过使它成为一个看起来像的JSON对象来生成更清晰的数据:

"Frequencies": {
    "with": 1,
    "witches": 1,
    "witchcraft": 3,
    "will": 2
}

不幸的是到目前为止,我只找到了一种手动方式来创建如上所示的数据,并且想知道是否有更为雄辩的生成数据的方式而不是我的凌乱脚本。我到了需要检索列表中最后一项的位置,并确保在我认为应该寻求建议之前最后一行没有逗号。这就是我所拥有的:

comma_count = 0
for i in sorteddict:
    comma_count += 1

with open("frequency.json", 'w') as f:
    json_head = "\"Frequencies\": {\n"
    f.write(json_head)
    while comma_count > 0:
        for s in sorteddict:
            f.write('\t\"' + s[0] + '\"' + ":" + str(s[1]) + ",\n")
            comma_count -= 1
    f.write("}")

我使用了json.JSONEncode.encode(),我认为这就是我所寻找的内容,但最终发生的事情"Frequencies"会被添加到每个s[0]项目中。有任何清理代码的想法吗?

2 个答案:

答案 0 :(得分:4)

您需要从当前的dict中创建嵌套的dict,并使用json.dumps。不确定sorteddict的工作原理,但是:

json.dumps({"Frequencies": mySortedDict})

应该有效。

另外,你说你想要json编码的东西,但你的例子是无效的json。所以我假设你真的想要合法的json。

以下是一些示例代码:

In [4]: import json

In [5]: # No idea what a sorteddict is, we assume it has the same interface as a normal dict. 

In [6]: the_dict = dict([
   ...:     ["with", 1],
   ...:     ["witches", 1],
   ...:     ["witchcraft", 3],
   ...: ])

In [7]: the_dict
Out[7]: {'witchcraft': 3, 'witches': 1, 'with': 1}

In [8]: json.dumps({"Frequencies": the_dict})
Out[8]: '{"Frequencies": {"with": 1, "witches": 1, "witchcraft": 3}}'

答案 1 :(得分:2)

我可能没有正确理解你 - 但你只是想将[word,frequency]列表列入字典吗?

frequency_lists = [
    ["with", 1],
    ["witches", 1],
    ["witchcraft", 3],
]
frequency_dict = dict(frequency_lists)
print(frequency_dict)  # {'with': 1, 'witches': 1, 'witchcraft': 3}

如果您想将其写入文件:

import json
with open('frequency.json', 'w') as f:
    f.write(json.dumps(frequency_dict))