Я хотел бы написать функцию, которая получает словарь в качестве входного аргумента и возвращает обратную ссылку словаря ввода, где значения исходного словаря используются как ключи для возвращаемого словаря, а ключи исходного словаря используются как значение для возвращенного словаря, как описано ниже:Как отменить словарь в Python?
dict = {'Accurate': ['exact', 'precise'],
'exact': ['precise'],
'astute': ['Smart', 'clever'],
'smart': ['clever', 'bright', 'talented']}
в
dict = {'precise': ['accurate', 'exact'],
'clever': ['astute', 'smart'],
'talented': ['smart'],
'bright': ['smart'],
'exact': ['accurate'],
'smart': ['astute']}
список значений в возвращаемом словаре должны быть отсортированы в порядке возрастания. Капитализация не имеет значения. Это означает, что все слова должны быть преобразованы в строчные буквы. Например, слово «Accurate» заглавное в оригинальном словаре, но в возвращенном словаре оно написано со всеми строчными буквами.
#My code is:
from collections import defaultdict
def reverse_dictionary(input_dict):
d = defaultdict(list)
for v,k in input_dict.items():
d[k].append(v)
return d
Но он возвращает эту ошибку, хотя:
Error in evaluating function:
TypeError at line 6
unhashable type: 'list'
Проблема заключается в том, что вы не можете использовать какой-либо объект в качестве ключа - эти объекты должны быть неизменными, поэтому их хэш va lue не изменяется после добавления в словарь. В вашем случае списки изменяемы, поэтому их нельзя использовать в качестве ключей. Вместо этого вы можете преобразовать их в кортежи. –
Добро пожаловать в StackExchange! Возможно, было бы полезно подумать над этой проблемой. Например, почему бы «Точная»: [«точно», «точно»] 'становиться« точным »: ['exact', 'exact']' вместо ''exact': ['exact', 'exact «] '? Что касается вашего сообщения об ошибке, список не может быть вашей ключевой фразой, но я думаю, что большая проблема заключается в том, что задача должна быть уточнена. –
Кроме того, словари не могут быть отсортированы. –