在多级dict中获取和设置值的最佳实践

时间:2012-11-21 15:11:46

标签: python getter-setter magic-methods dictionary

  

可能重复:
  Checking a Dictionary using a dot notation string

这样有一个多级别的词典:

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")的工作?

1 个答案:

答案 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