2014-03-19 67 views
0

我想產生倒置的字典在Python倒Python的字典JSON

import json 

def readfile(): 
    with open('/home/krishna/Desktop/data/synonyms.json', 'r') as f: 
     read_data = f.read() 
     j = json.loads(read_data) 
     inverted_dict = dict([v,k] for k,v in j.items()) 


if __name__ == "__main__": 
    readfile() 

別名文本文件有:

{ 
viral fever: [ 
"fever", 
"viral fever" 
], 
sickness: [ 
"acute sickness", 
"typhoid" 
],.. 
} 

我面對的錯誤是:

File "/home/krishna/Desktop/Scripts/jsonparse.py", line 7, in readfile 
inverted_dict = dict([v,k] for k,v in j.items()) 
TypeError: unhashable type: 'list' 

我的預期輸出字典

fever: viral fever 
viral fever: viral fever 
acute sickness: sickness 
typhoid: sickness 
+1

而預期的輸出是什麼? 「發燒」是「病毒性發熱」還是「發燒」,「病毒性發熱」是關鍵? –

+0

我編輯了我的問題。 –

+0

你不能有一個列表作爲字典鍵。 – Bonifacio2

回答

2

您的值是列表;你需要遍歷每個值的元素明確地使這些單獨的鍵:

dict((i, k) for k, v in j.items() for i in v) 

如果您使用Python 2.7或3,您可以在這裏使用字典理解太:

{i: k for k, v in j.items() for i in v} 

可以導致重複的條目,只有最後一個將'堅持'。如果有多個值(所以fever列表中的兩個sicknessviral fever是重複的值,你需要建立一個字典,setlist值改爲:

from collections import defaultdict 

result = defaultdict(set) 
for k, v in j.items(): 
    for i in v: 
     result[i].add(k) 
0

名單["fever", "viral fever"]不是有效對於字典鍵,因爲它是可變的

你可能想要麼:

  • 使用字符串"fever""viral fever"作爲指代相同值的單獨密鑰,
  • 使用元組("fever", "viral fever")或者使用凍結集frozenset(["fever", "viral fever"])代替列表作爲代詞密鑰。 (套沒有訂單。)