python - 这句是什么错误?
问题描述
File 'log1.py', line 140 for ref, occurnum in nsmallest(10, d.iteritems(), key=lambda (k,v): (-v,k)): ^SyntaxError: invalid syntax
代码如下
def TopOccurr(num, request, total):args = parse_args()d = {}for i in get_obj[num]:if i in d:d[i] = d[i]+1else:d[i] = 1x = PrettyTable([request, total])x.align['Requests'] = 'l'x.padding_width = 1for ref, occurnum in nsmallest(10, d.iteritems(), key=lambda (k,v): (-v,k)):x.add_row([ref[:120], occurnum])return x.get_string(start=0, end=10, sortby=total, reversesort=True)
py3.5.2
问题解答
回答1:lambda定义的时候,如果有多个参数,那么这些参数是不需要加括号的e.g.
l=lambda x,y:(y,x) # 正确
l=lambda (x,y):(y,x) # 报错
官方文档中的lambda:
贴上修改后完整代码:
def TopOccurr(num, request, total): args = parse_args() d = {} for i in get_obj[num]:if i in d: d[i] = d[i]+1else: d[i] = 1 x = PrettyTable([request, total]) x.align['Requests'] = 'l' x.padding_width = 1 for ref, occurnum in nsmallest(10, d.iteritems(), key=lambda k,v:(-v,k)):x.add_row([ref[:120], occurnum]) return x.get_string(start=0, end=10, sortby=total, reversesort=True)
实测没有报错(Python 3.6.0,IPython 5.3.0)
python3中lambda不支持用括号的方式解压数据
回答3:把参数的括号去掉就行了。
相关文章:
1. Docker for Mac 创建的dnsmasq容器连不上/不工作的问题2. 怎么php怎么通过数组显示sql查询结果呢,查询结果有多条,如图。我要forsearch里面echo3. python - Push Notification推送服务在手机上测试时候无法收到生产环境的推送4. java - bin目录有什么特殊含义吗?为什么可执行文件都放在bin目录?5. python - django 项目的 migrations 目录是否应该提交到 git6. 前端 - css自定义字体7. css - 手机qq打开网页无法使用文件上传功能?8. java - 如何求多叉树两个任意节点的最短路径呢?9. golang - 用IDE看docker源码时的小问题10. javascript - 使用nodejs发get请求时遇到的一个错误

网公网安备