簡體   English   中英

如何優化python遞歸

[英]How to optimize python recursion

我有以下代碼,必須轉換此元組

(
    '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

是否可以優化此代碼而無需遞歸? 據我了解,有尾遞歸,但我不知道如何在循環中進行轉換

我重寫了函數而沒有遞歸。

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

該alorithm:我的每一條路徑分成了部分,然后建立一個循環subdicts保持基准dest字典的部分目前我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM