Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化python递归_Python_Recursion_Optimization - Fatal编程技术网

如何优化python递归

如何优化python递归,python,recursion,optimization,Python,Recursion,Optimization,我有以下代码,必须转换这个元组 ( 'person.firstname', 'person.patronymic', 'person.documents.type', 'person.documents.number', 'person.employee_set.unit.short_name', 'person.employee_set.group_set.name', 'person.employee_set.group_set.per

我有以下代码,必须转换这个元组

(
    'person.firstname',
    'person.patronymic',
    'person.documents.type',
    'person.documents.number',
    'person.employee_set.unit.short_name',
    'person.employee_set.group_set.name',
    'person.employee_set.group_set.period.code',
    'unit.short_name',
)
像这样读字典

    {
    "person": {
        "patronymic": {}, 
        "documents": {
            "type": {}, 
            "number": {}
        }, 
        "employee_set": {
            "unit": {
                "short_name": {}
            }, 
            "group_set": {
                "name": {}, 
                "period": {
                    "code": {}
                }
            }
        }, 
        "firstname": {}
    }, 
    "unit": {
        "short_name": {}
    }
}
代码:


有没有可能在没有递归的情况下优化此代码?据我所知,它有一个尾部递归,但我不知道如何在循环中转换它

我重写了没有递归的函数

def to_dict(items):
    res = {}
    for item in items:
        parts = item.split('.')
        dest = res
        for part in parts:
            if not part in dest:
                dest[part] = {}
            dest = dest[part]
    return res

to_dict([
    'person.firstname',
    'person.patronymic',
    'person.documents.type',
    'person.documents.number',
    'person.employee_set.unit.short_name',
    'person.employee_set.group_set.name',
    'person.employee_set.group_set.period.code',
    'unit.short_name',
])

算法:我将每一条路径分割成各个部分,然后在一个循环中构建子部分,保留对我当前所在字典部分的引用。

我重写了函数,没有递归

def to_dict(items):
    res = {}
    for item in items:
        parts = item.split('.')
        dest = res
        for part in parts:
            if not part in dest:
                dest[part] = {}
            dest = dest[part]
    return res

to_dict([
    'person.firstname',
    'person.patronymic',
    'person.documents.type',
    'person.documents.number',
    'person.employee_set.unit.short_name',
    'person.employee_set.group_set.name',
    'person.employee_set.group_set.period.code',
    'unit.short_name',
])

算法:我把每条路径分成几个部分,然后在一个循环中构建子部分,保留对我当前所在词典部分的引用。

你可以看这篇文章-你可以看这篇文章-谢谢。我在这周学习编程,你帮了我很大的忙。谢谢。我在这周学习编程,你帮了我很大的忙。