2

重複の可能性:
ドット表記文字列を使用して辞書を確認する

次のようなマルチレベルの辞書があります。

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がありますが、のように作業を行う簡単で良い方法はあり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')

編集dict.get- どうやらこれは、OPがKeyErrorを抑制するために使用されていたにもかかわらず、私が十分に注意深く読んでいなかった前の質問でOPが行った方法です。

アイテムを設定するには、最後の要素を分割して、その上の要素を取得する必要があります。

def dot_set(your_dict,s,v):
    head,tail = s.rsplit('.',1)
    dot_get(yourdict,head)[tail] = v
于 2012-11-21T15:39:06.327 に答える