2

可能重复:
使用点符号字符串检查字典

有一个像这样的多级字典:

some_infomations = {
    "root":{
        "sub":{
            "more_deep":{
                "not_enough": "Some value",
                "another": "bla..bla"
            }
        },
        "more":{
            "more_deep":{
                "not_enough": "Some value",
                "another": "bla..bla"
            }
        }
    }
}

我有一个 crumbs 字符串,例如root.sub.more_deep.another,有没有一种简单而好的方法来完成这项工作eval("some_infomations[root.sub.more_deep.another] = some_value")

4

1 回答 1

1

在这里发布主要是为了好玩,但也因为reduce它的用途比大多数人认为的要多得多……:

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
于 2012-11-21T15:39:06.327 回答