27
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 之间的语法差异,但一无所获。任何帮助或修复将不胜感激。

4

1 回答 1

61

Python3 中不允许使用括号来解包 lambda 中的参数。原因见PEP 3113

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

而是使用:

lambda kv: (-kv[1], kv[0])
于 2013-03-29T22:13:56.697 回答