Je voudrais écrire une fonction qui reçoit un dictionnaire en tant qu'argument d'entrée et retourne une inversion du dictionnaire en entrée où les valeurs du dictionnaire d'origine sont utilisées comme clés pour le dictionnaire renvoyé et les clés du dictionnaire d'origine sont utilisées en tant que valeur pour le dictionnaire. dictionnaire retourné comme expliqué ci-dessous:
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']}
La liste des valeurs du dictionnaire renvoyé doit être triée par ordre croissant. La capitalisation n'a pas d'importance. Cela signifie que tous les mots doivent être convertis en lettres minuscules. Par exemple, le mot "exact" est en majuscule dans le dictionnaire d'origine mais dans le dictionnaire renvoyé, il est écrit avec toutes les lettres minuscules.
#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
Mais il retourne cette erreur cependant:
Error in evaluating function:
TypeError at line 6
unhashable type: 'list'
Vous pouvez le faire très simplement comme ceci:
newdict = {}
for key, value in olddict.items():
for string in value:
newdict.setdefault(string, []).append(key)
Je commencerais par échanger les clés/valeurs à l'aide d'un dict par défaut:
output_dict = defaultdict(list)
for key, values in input_dict.items():
for value in values:
output_dict[value.lower()].append(key.lower())
Et enfin le tri:
for key, values in output_dict.items():
output_dict[key] = sorted(values)
Utilisez une compréhension dictée!
>>> 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; DR:
{i[1]:i[0] for i in myDictionary.items()}
c'est la réponse, sans utiliser aucun module:
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
Comment je renverse un dict:
def reverse(org):
return {v: k for k, v in org.items()}
print(reverse({1: 'a', 2: 'b'}))
# {'a': 1, 'b': 2}