1.Python 3.2 Lambda语法错误
def sort_dictionary( wordDict ):
sortedList = []
for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k) ):
sortedList.append( entry )
return sortedList
遇到错误:
for entry in sorted(wordDict.iteritems(), key = lambda (k, v): (-v, k)):
^
SyntaxError: invalid syntax
解决办法:
使用python 2.7.2运行时该函数工作正常
在Python3中不允许使用括号来解压缩lambda中的参数.
lambda (k, v): (-v, k)
而是使用:
lambda kv: (-kv[1], kv[0])
所以修改后运行:
def sort_dictionary(wordDict ):
sortedList = []
for entry in sorted(wordDict.items(), key = lambda kv: (-kv[1], kv[0]) ):
sortedList.append( entry )
return sortedList
wordDict = {"this":1,"是":3,"a":0,"大":2,"句子":9}
f=lambda kv:(-kv[1], kv[0])
print(f((1,2)))
kk = sort_dictionary(wordDict )
print(kk)
>>>(-2, 1)
>>>[('句子', 9), ('是', 3), ('大', 2), ('this', 1), ('a', 0)]
2.Python报错:'dict' object has no attribute 'iteritems'
错误原因
首先我们先看一下报错:
AttributeError: 'dict' object has no attribute 'iteritems'
翻译过来是:
属性错误:“dict”对象没有属性“iteritems”
这样我们就可以理解了,原因是对象本身出现了问题,并不是我们输入错误。
原因在于:python3中已经没有 “iteritems” 这个属性了,现在属性是:“ items ” 。
当然,如果你使用的是以前的Python版本,不会出现这个错误。