Python 3.2 Lambda语法错误

Zac*_*ack 21 python lambda syntax-error

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

    return sortedList
Run Code Online (Sandbox Code Playgroud)

该函数将接收包含以下信息的字典:{'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
Run Code Online (Sandbox Code Playgroud)

当我用python 3.2.3运行程序时.我一直在寻找原因,或2.7和3.2之间的语法差异,并且没有提出任何结果.任何帮助或修复将不胜感激.

unu*_*tbu 48

在Python3中不允许使用括号来解压缩lambda中的参数.请参阅PEP 3113.

lambda (k, v): (-v, k)
Run Code Online (Sandbox Code Playgroud)

而是使用:

lambda kv: (-kv[1], kv[0])
Run Code Online (Sandbox Code Playgroud)

  • @Blender它被证明很少被使用,并且使得函数注释之类的东西变得笨拙,并且为一些内省的东西增加了复杂性.它也很容易被替换.见[PEP-3113](http://www.python.org/dev/peps/pep-3113/). (5认同)
  • @Zack`iteritems()`就在那里2.x中的`items()`返回一个列表,这是内存效率低的.在3.x中,`items()`返回一个迭代器,不需要`iteritems()`. (2认同)