Python 3.2 Lambda 语法错误 [重复]

Posted

技术标签:

【中文标题】Python 3.2 Lambda 语法错误 [重复]【英文标题】:Python 3.2 Lambda Syntax Error [duplicate] 【发布时间】:2013-03-20 16:24:39 【问题描述】:
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 之间的语法差异,但一无所获。任何帮助或修复将不胜感激。

【问题讨论】:

值得注意的是,在= 和参数之间放置空格是违反PEP-8 的建议的。 【参考方案1】:

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

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

改为使用:

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

【讨论】:

为什么要删除这个语法? @Blender 它被证明很少使用,并且使函数注释之类的东西变得尴尬,并且增加了一些内省的复杂性。它也很容易更换。见PEP-3113。 非常感谢!这完美地工作。另外,这并不重要,但您是否知道为什么我必须将 iteritems() 更改为 items() 才能使用 python3 运行它? @Zack iteritems() 在那里,因为 2.x 中的 items() 返回一个列表,这是内存效率低下的。在 3.x 中,items() 返回一个迭代器,不再需要 iteritems() @Lattyware:感谢您回答所有问题 :)

以上是关于Python 3.2 Lambda 语法错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL 语法错误:SET 语法(Lambda 函数)

使用 Python 3 的 pyspark 中的 seed = 5L 返回语法错误

关于Python中的lambda

lambda

5道练习题,测试你掌握 python 进阶语法-lambda函数了吗? | Python技能树征题

Python中的lambda