[英]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.