Chciałbym napisać funkcję, która odbiera słownik jako argument wejściowy i zwraca odwrotność słownika wejściowego, w którym wartości oryginalnego słownika są używane jako klucze dla zwróconego słownika, a klucze oryginalnego słownika są używane jako wartość dla wracającej słowniku jak poniżej:Jak odwrócić słownik w Pythonie?
dict = {'Accurate': ['exact', 'precise'],
'exact': ['precise'],
'astute': ['Smart', 'clever'],
'smart': ['clever', 'bright', 'talented']}
do
dict = {'precise': ['accurate', 'exact'],
'clever': ['astute', 'smart'],
'talented': ['smart'],
'bright': ['smart'],
'exact': ['accurate'],
'smart': ['astute']}
listę wartości w zwróconym słownika powinny być sortowane w porządku rosnącym. Kapitalizacja nie ma znaczenia. Oznacza to, że wszystkie słowa powinny być konwertowane na małe litery. Na przykład słowo "dokładny" jest pisane wielką literą w oryginalnym słowniku, ale w zwracanym słowniku jest napisane wszystkimi małymi literami.
#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
ale zwraca ten błąd, jednak:
Error in evaluating function:
TypeError at line 6
unhashable type: 'list'
Problem polega na tym, że nie można użyć żadnego obiektu jako klucza - obiekty te muszą być niezmienne, tak aby ich hash va Lue nie zmienia się po dodaniu do słownika. W twoim przypadku listy są zmienne, więc nie mogą być używane jako klucze. Zamiast tego możesz zamienić je na krotki. –
Witamy w StackExchange! Warto zastanowić się nad tym problemem. Na przykład, dlaczego "Dokładnie": ["dokładny", "precyzyjny"] "staje się" precyzyjny ": [" dokładny "," dokładny "]" zamiast "" dokładny ": [" dokładny "," dokładny "; "]'? Jeśli chodzi o twój komunikat o błędzie, lista nie może być twoim kluczem do dyktowania, ale myślę, że większy problem polega na tym, że twoje zadanie wymaga wyjaśnienia. –
Również słowniki nie mogą być sortowane. –