将列表转换为嵌套字典
比如我有
x = ['a','b','c']
我需要把它转换成:
y['a']['b']['c'] = ''
这样可以吗?
背景是,我有一个配置文件,里面有点状表示法,它指向一些json数据中的某个地方。我想用这个点状表示法字符串来访问json文件中的特定数据。例如,在配置文件中:
path_to_data = "user.name.first_name"
我希望我的脚本能把它识别为:
json_data["user"]["name"]["first_name"]
这样我就可以获取first_name字段的值。我把原来的字符串转换成了一个列表,但现在我不知道怎么把它转换成一个嵌套字典。
编辑:我需要把这个字典应用到一个已有的数据结构上。假设:
m = {'a': {'b': {'c': 'lolcat'}}}
这样
m['a']['b']['c']
就能给我'lolcat'。如果我得到了正确的字典结构(就像一些回复所说的那样),我仍然需要把它应用到现有的字典'm'上。
所以,再次说明,我从配置文件中得到了这个:
c = 'a.b.c'
我把它转换成了一个列表,想着这样会更简单:
x = ['a','b','c']
现在我有一个类似json的数据结构:
m = {'a': {'b': {'c': 'lolcat'}}}
所以从'x'生成的嵌套字典应该能够遍历'm',这样
m['a']['b']['c']
就能让我得到猫咪。
6 个回答
1
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或语言时。比如,有人可能会在使用某个库的时候,发现它的某些功能不太好用,或者在运行代码时出现错误。这种情况下,通常我们会去查找相关的资料,看看有没有人遇到过类似的问题,或者有没有解决方案。
StackOverflow是一个很好的地方,很多程序员会在这里分享他们的经验和解决方案。如果你在编程过程中遇到困难,可以在这个网站上搜索一下,看看有没有人问过类似的问题,或者直接发帖询问其他人。
记得在提问时,尽量把你的问题描述清楚,提供一些相关的代码和错误信息,这样其他人才能更好地理解你的问题,并给出帮助。
>>> x = ['a','b','c']
>>> y={}
>>> y[x[-1]]=""
>>> x.pop(-1)
'c'
>>> for i in x[::-1]:
... y={i:y}
...
>>> y
{'a': {'b': {'c': ''}}}
>>> y['a']['b']['c']
''
4
我想你可能也想在最后加一个值。这个方法也可以做到:
def get_value(d, l):
if len(l) > 1:
return get_value(d[l[0]], l[1:])
return d[l[0]]
def add_keys(d, l, c=None):
if len(l) > 1:
d[l[0]] = _d = {}
d[l[0]] = d.get(l[0], {})
add_keys(d[l[0]], l[1:], c)
else:
d[l[0]] = c
def main():
d = {}
l1 = ['a', 'b', 'c', 'd']
c1 = 'letters'
l2 = [42, "42", (42,)]
c2 = 42
add_keys(d, l1, c1)
print d
add_keys(d, l2, c2)
print d
if __name__ == '__main__':
main()
它会输出:
{'a': {'b': {'c': {'d': 'letters'}}}}
{'a': {'b': {'c': {'d': 'letters'}}}, 42: {'42': {(42,): 42}}}
letters
42
所以这个方法肯定有效。递归真是太棒了。
6
li = ['a','b','c']
d = reduce(lambda x, y: {y:x}, reversed(li+['']))
print(d)
print(d['a']['b']['c'])
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。