所以,我把这个索引作为一个字典
index = {'Testfil2.txt': ['nisse', 'hue', 'abe', 'pind'], 'Testfil1.txt': ['hue', 'abe',
'tosse', 'svend']}
我需要反转索引,这样它将是一个dict,其中的重复值合并为一个键,而两个原始键作为值,如下所示:
inverse = {'nisse' : ['Testfil2.txt'], 'hue' : ['Testfil2.txt', 'Testfil1.txt'],
'abe' : ['Testfil2.txt', 'Testfil1.txt'], 'pind' : ['Testfil2.txt'], 'tosse' :
['Testfil1.txt'], 'svend' : ['Testfil1.txt']
是的,我用手打了上面的。
我的课本有翻字典的功能:
def invert_dict(d):
inverse = dict()
for key in d:
val = d[key]
if val not in inverse:
inverse[val] = [key]
else:
inverse[val].append(key)
return inverse
对于简单的键:值对,它工作得很好
但是,当我用一个dict尝试该函数时,该dict将列表作为值,例如myindex
,我会收到以下错误消息:
invert_dict(index)
Traceback (most recent call last):
File "<pyshell#153>", line 1, in <module>
invert_dict(index)
File "<pyshell#150>", line 5, in invert_dict
if val not in inverse:
TypeError: unhashable type: 'list'
我已经找了一个小时的解决方案,这本书没有帮助,我怀疑我可以用元组在某种程度上,但我不知道如何。有什么帮助吗?
我试过了,你想使用
val not in inverse
,但如果“列表在dict中”,则无法检查它。(val
是一个列表)对于您的代码,一个简单的更改将执行您想要的操作:
不能使用
list
对象作为字典键,因为它们应该是散列对象。您可以循环您的项并使用dict.setdefault
方法创建预期结果:如果您处理的是拒绝在每次调用
setdefault()
方法时创建空列表的较大数据集,则可以使用collections.defaultdict()
,它将在遇到新键时调用丢失的函数。我倒字典的办法。但是,它创建了一个新字典
new_dic
:输出:
相关问题 更多 >
编程相关推荐