我的python2.7代码包含lambda排序技术,可以根据定义的顺序对获取的元素进行排序。昨天我从Python2.7迁移到Python3.6,问题是在迁移之后,我写lambda sort的那一行在程序中抛出错误。对于从py2到py3的迁移,我使用lib2to3。我相信这是py3中某些语法不匹配的原因,但无法解决。错误日志如下所述-
My code Fragment:
property_sort_order = ['field', 'rename', 'selected', 'description']
node_property_value_list = []
node_property_value_list = node_property_value[nodekey]
node_property_value_list = [OrderedDict(
sorted(item.iteritems(), key=lambda (k, v): property_sort_order.index(k)))
for item in node_property_value_list]
for item in node_property_value_list]
#print node_property_value_list
node_property_value[nodekey] = node_property_value_list
Errror:
for item in node_property_value_list]
TypeError: <lambda>() missing 1 required positional argument: 'v'
您需要将
key=lambda k, v: property_sort_order.index(k)
变成key=lambda k_v:property_sort_order.index(k_v[0])
-lambda将获得一个元组,在python3.6中无法对其进行分解。在在python2中,可以在lambda/函数参数中解压
(k, v)
元组,但是not in Python 3。你可以直接打开lambda或者作为一个单独的语句解包(这在lambda中无法完成)。在
^{pr2}$相关问题 更多 >
编程相关推荐