def sort_dictionary( wordDict ):
sortedList = []
for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k) ):
sortedList.append( entry )
return sortedList
La fonction recevrait un dictionnaire contenant des informations telles que: {'ceci': 1, 'est': 1, 'a': 1, 'grand': 2, 'phrase': 1} Je voudrais le faire générer une liste de listes, avec les éléments classés d'abord par les valeurs du dictionnaire du plus grand au plus petit, puis par les touches par ordre alphabétique.
La fonction fonctionne correctement lorsqu'elle est exécutée avec python 2.7.2, mais je reçois l'erreur:
File "frequency.py", line 87
for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k)):
^
SyntaxError: invalid syntax
lorsque j'exécute le programme avec python 3.2.3. J'ai cherché partout pour une raison, ou des différences de syntaxe entre 2.7 et 3.2, et je n'ai rien trouvé. Toute aide ou correction serait grandement apprécié.
L'utilisation de parenthèses pour décompresser les arguments dans un lambda n'est pas autorisée dans Python3. Voir PEP 311 pour la raison.
lambda (k, v): (-v, k)
Utilisez plutôt:
lambda kv: (-kv[1], kv[0])