我已经编写了关于如何做到这一点并输出它的逻辑,但我无法以循环/递归风格对这种结构进行编码。
string = "a.b.c.d"
parent = {}
keys = string.split(".")
parent[keys[0]] = dict()
parent[keys[0]][keys[1]] = dict()
parent[keys[0]][keys[1]][keys[2]] = dict()
需要对逻辑的以下部分进行编码:
parent[keys[0]] = dict()
parent[keys[0]][keys[1]] = dict()
parent[keys[0]][keys[1]][keys[2]] = dict()
and so on.....
您只需使用split('.', 1)
就可以连续地将第一部分从其余部分中分离出来,并将其传递到递归调用中:
def dictify(s):
if '.' not in s:
return s
key, rest = s.split('.', 1)
return {key: dictify(rest)}
测试:
>>> dictify('a.b.c.d')
{'a': {'b': {'c': 'd'}}}
如果您希望最后一个级别也有一个空dict,而不仅仅是值,您可以将第一部分中的return s
更改为return {s: {}}
非递归解决方案:
s = "a.b.c.d"
root = None
parent = None
keys = s.split(".")
for key in keys:
if (parent is None):
root = {}
parent = root
d = {}
parent[key] = d
parent = d
print (root)
输出:
{'a': {'b': {'c': {'d': {}}}}}