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, 'предложение': 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])
Другие вопросы по тегам