如何优化python递归

2024-03-29 02:18:52 发布

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

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

(
    '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):
    di = {}
    for item in items:
        parse(di, item)
    return di


def parse(di, item): 
    sep = item.find('.')
    if sep != -1:
        key = item[:sep]
        if not key in di.keys():
            di[key] = {}
        return parse(di[key], item[sep + 1:])
    elif len(item) > 0:
        di[item] = {}
        return di

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


Tags: key代码namereturnparsegroupemployeeunit
1条回答
网友
1楼 · 发布于 2024-03-29 02:18:52

我重写了这个函数,没有递归。你知道吗

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',
])

算法:我将每条路径分割成不同的部分,然后在循环中构建子部分,保留对我当前所在字典部分的引用。你知道吗

相关问题 更多 >