通过搜索键从另一个字典制作字典

时间:2014-11-08 23:42:54

标签: python dictionary

我的字典看起来像这样:

 dictionary1={'orange':[red,yellow],'green':[blue,yellow],'purple'[red,blue]}

并希望创建一个新字典,将旧字典转换为:

dictionary2={'red':[orange,purple],'blue':[green,purple],'yellow':[orange,green]}

所以基本上代码应该遍历这些值,并使每个代码成为一个键,将与它们关联的旧键设置为一个值(抱歉这句话有点令人困惑)

这是我试过的:

def makeReverseDictionary():
    dictionary1 ={}
    dictionary1 = makeDictionaryFromFile()
    dictionary2={}
    for k, v in dictionary1.iteritems():
        dictionary2.setdefault(v,[]).append(k)
    print (dictionary2)   

我将list objects are unhashable视为错误。我认为可能发生的是它试图将每个值分配两次(例如黄色,黄色:[橙色,绿色]),这是不可能的。但我不确定如何解决它。

1 个答案:

答案 0 :(得分:2)

如果您尝试使用整个列表作为键,则会出现list objects are unhashable错误。您需要遍历列表并将每个项目用作键。

dict1 = {'orange':['red','yellow'], 'green':['blue','yellow'], 'purple':['red','blue']}

dict2 = {}

for k,vlist in dict1.iteritems(): # or dict1.items() in Python3
    for v in vlist:
        dict2.setdefault(v,[]).append(k)

这会产生dict2

{'blue': ['purple', 'green'], 'yellow': ['orange', 'green'], 'red': ['orange', 'purple']}

编辑:

setdefault的替代方案是dict2使用defaultdict(list)