Ошибка синтаксиса Lambda 3.2 Python 3.2.

def sort_dictionary( wordDict ):
    sortedList = []
    for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k) ):
        sortedList.append( entry )

    return sortedList

Функция будет получать словарь, содержащий информацию, такую ​​как: {'this': 1, 'is': 1, 'a': 1, 'large': 2, 'sentence': 1} Я бы хотел, чтобы он сгенерировал список списков, причем сначала упорядоченные элементы по значениям словаря от наибольшего до наименьшего, затем по клавишам в алфавитном порядке.

Функция работает нормально при запуске с python 2.7.2, но я получаю сообщение об ошибке:

  File "frequency.py", line 87
    for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k)):
                                                           ^
SyntaxError: invalid syntax

когда я запускаю программу с помощью python 3.2.3. Я искал все по причине, почему, или синтаксические различия между 2,7 и 3,2, и ничего не придумал. Любая помощь или исправления были бы оценены.

Ответ 1

Использование скобок для распаковки аргументов в лямбда не допускается в Python3. См. PEP 3113 по этой причине.

lambda (k, v): (-v, k)

Вместо этого используйте:

lambda kv: (-kv[1], kv[0])