2014-03-19 39 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"])代替列表作为代词密钥。 (套没有订单。)