web-dev-qa-db-fra.com

Python 3.2 Erreur de syntaxe Lambda

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é.

23
Zack

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])
52
unutbu