Python3的Lambda排序问题

2024-05-28 23:58:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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'

Tags: lambda代码innodefor排序value错误
2条回答

您需要将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 item: property_sort_order.index(item[0])

或者作为一个单独的语句解包(这在lambda中无法完成)。在

^{pr2}$

相关问题 更多 >

    热门问题