2016-08-30 65 views
0

我有一个原始列表sorteddict的形式:转换原始列表JSON数据与Python

["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

我可能没有正确理解你 - 但是你只是想把[单词,频率]列表变成一个字典列表吗?

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)) 
4

你需要做一个嵌套的字典出当前的一个,并且使用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}}' 
+0

差不多吧。 '''from sortedcontainers import SortedDict sorted_dict = SortedDict({...})''' – Alexander

+0

@Alexander它不是一个标准模块,我不想具体说它,但假设它符合字典界面,这个例子将起作用。 –

+0

Python词典无序,所以你的例子是误导。 – Alexander