Итак, у меня есть этот индекс как dict.Инвертирование словаря со значениями списка
index = {'Testfil2.txt': ['nisse', 'hue', 'abe', 'pind'], 'Testfil1.txt': ['hue', 'abe',
'tosse', 'svend']}
Мне нужно, чтобы инвертировать индекс, так это будет Dict с дубликатами значений объединены в один ключ с 2 оригинальных ключей в качестве значений, например:
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
Это прекрасно работает для простых пар ключ: значение
НО, когда я пытаюсь эту функцию с Словаре, который имеет списки в качестве значений, таких как мой index
я получаю сообщение об ошибке:
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'
Я искал в течение часа, ища решения, книга не поможет, и я подозреваю, что Я могу каким-то образом использовать кортежи, но я не уверен, как это сделать. Любая помощь?
Это не держит 'list' всех ключей, связанных с ГИ значение ven, оно уменьшает все, кроме последнего увиденного. – ShadowRanger
Да, столько я собрал! Это довольно хорошо, мне просто нужны ключи, чтобы иметь несколько значений, например. ''' hue'' имеет как' 'Testfil1.txt'' AND' 'Testfil2.txt'', так и все, что идеально. – Vestergaardish
@ShadowRanger Да, просто исправлено. – Kasramvd