我的字典看起来像这样:
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
视为错误。我认为可能发生的是它试图将每个值分配两次(例如黄色,黄色:[橙色,绿色]),这是不可能的。但我不确定如何解决它。
答案 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)
。