如何在Python中将字符串(uri)拆分为嵌套字典



转换字符串uri(如abc/efg/hij/klm(并输出嵌套字典(如下图所示(的最佳方法是什么?输入uri可能有许多斜杠。

{
'abc': {
'dfg': {
'hij': {
'klm': {}
}
}
}
}

这个代码片段可以工作-您可以通过斜杠标记将字符串拆分成一个列表,然后反转它,这样您就可以从内到外构建嵌套字典:

uri = 'abc/efg/hij/klm'.split('/')
uri.reverse()
nested = {}
for i in uri:
nested = {i:nested}

递归函数

splitstrg = lambda strlist: {strlist.pop(0): splitstrg(strlist) if strlist else {}}

像这样使用:

strg = 'abc/efg/hij/klm'
splitstrg(strg.split('/'))

输出:

{'abc': {'efg': {'hij': {'klm': {}}}}}

高性能版本:

from collections import deque
splitstrg = lambda strdeq: {strdeq.popleft(): splitstrg(strdeq) if strdeq else {}}
splitstrg(deque(strg.split('/')))

使用functools.reduce:的一行

from functools import reduce
x = 'abc/efg/hij/klm'
d = reduce(lambda d, k: {k: d}, reversed(x.split("/")), {})

这个并不优雅。但很简单。

x= "abc/efg/hij/klm"
l_x = x.split("/")
d = {}
for e in reversed(l_x):
d = {e: d}
print(d)

简单:

uri = 'abc/efg/hij/klm'
dic = {}
for key in uri.split('/')[::-1]:
dic = {key: dic}
print(dic)

输出:

{'abc': {'efg': {'hij': {'klm': {}}}}}

一个简单的方法是将字符串拆分成一个列表,并使用简单的递归

def fn(i,dict,a):   
if i == len(a):
return {}
temp = {a[i] : fn(i+1,dict,a)}
return temp
uri = 'abc/efg/hij/klm'
a = uri.split('/')
dict = fn(0,dict,a)
print dict
  1. 在"/"上拆分字符串

  2. 对于上面数组中的每个单词,从最后一个单词(反向(单词((构建字典

  3. 返回字典

def convert2(inpstr):
inpstr = "abc/efg/hij/klm"
words = inpstr.split("/")
d={}
for i in reversed(words):
d = {i:d}
return d

最新更新