如何在 Python 中将 a.b.c.d 转换为类似这样的东西 {'a': {'b': {'c': {'d':}}}}?

  • 本文关键字:Python 中将 转换 python dictionary
  • 更新时间 :
  • 英文 :


我已经编写了关于如何做到这一点并输出它的逻辑,但我无法以循环/递归风格对这种结构进行编码。

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': {}}}}}

最新更新