2016-08-30 21 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