Ответ 1
Вы можете сделать это очень просто:
newdict = {}
for key, value in olddict.items():
for string in value:
newdict.setdefault(string, []).append(key)
Я хотел бы написать функцию, которая получает словарь в качестве входного аргумента и возвращает обратную ссылку словаря ввода, где значения исходного словаря используются как ключи для возвращаемого словаря, а ключи исходного словаря используются как значение для возвращаемого словаря, как описано ниже:
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'
Вы можете сделать это очень просто:
newdict = {}
for key, value in olddict.items():
for string in value:
newdict.setdefault(string, []).append(key)
Я бы начал с обмена ключами/значениями по умолчанию:
output_dict = defaultdict(list)
for key, values in input_dict.items():
for value in values:
output_dict[value.lower()].append(key.lower())
И, наконец, сортировка:
for key, values in output_dict.items():
output_dict[key] = sorted(values)
Используйте понимание dict!
>>> evil_petting_zoo = {'bear':3, 'crocodile':1,'kangaroo':2,'goat':0}
>>> evil_petting_zoo.items()
dict_items([('bear', 3), ('crocodile', 1), ('kangaroo', 2), ('goat', 0)])
>>> {i[1]:i[0] for i in evil_petting_zoo.items()}
{3: 'bear', 1: 'crocodile', 2: 'kangaroo', 0: 'goat'}
TL; ДР:
{i[1]:i[0] for i in myDictionary.items()}
Как я отменяю dict:
def reverse(org):
return {v: k for k, v in org.items()}
print(reverse({1: 'a', 2: 'b'}))
# {'a': 1, 'b': 2}
это ответ, без использования какого-либо модуля:
def reverse_dictionary(input_dict):
out = {}
for v in input_dict.values():
for value in v:
if value not in out:
out[value.lower()] = []
for i in input_dict:
for j in out:
if j in map (lambda x : x.lower(),input_dict[i]):
out[j].append(i.lower())
out[j].sort()
return out