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 运行它? @Zackiteritems()
在那里,因为 2.x 中的 items()
返回一个列表,这是内存效率低下的。在 3.x 中,items()
返回一个迭代器,不再需要 iteritems()
。
@Lattyware:感谢您回答所有问题 :)以上是关于Python 3.2 Lambda 语法错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 3 的 pyspark 中的 seed = 5L 返回语法错误