这样有一个多级别的词典:
some_infomations = {
"root":{
"sub":{
"more_deep":{
"not_enough": "Some value",
"another": "bla..bla"
}
},
"more":{
"more_deep":{
"not_enough": "Some value",
"another": "bla..bla"
}
}
}
}
我有一个像root.sub.more_deep.another
这样的crumbs字符串,是否有一种简单而好的方式来完成eval("some_infomations[root.sub.more_deep.another] = some_value")
的工作?
答案 0 :(得分:1)
这里发布的主要是为了好玩,但也因为reduce
比大多数人对它的使用要多得多...... {/ p>
from operator import getitem
def dot_get(your_dict,s):
return reduce(getitem, s.split('.'), your_dict)
d = {'foo': {'bar': {'baz': 1}}}
print dot_pull(d,'foo.bar.baz')
编辑 - 显然这就是OP在上一个问题中做到的,我没有仔细阅读,尽管OP使用了dict.get
来抑制KeyError。
要设置项目,您需要拆分最后一个元素,并获取其上方的元素:
def dot_set(your_dict,s,v):
head,tail = s.rsplit('.',1)
dot_get(yourdict,head)[tail] = v