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