How to get nested dictionary key value with .get()

前端 未结 4 1534
臣服心动
臣服心动 2021-02-07 02:48

With a simple dictionary like:

myDict{\'key1\':1, \'key2\':2}

I can safely use:

print myDict.get(\'key3\')

an

4条回答
  •  伪装坚强ぢ
    2021-02-07 03:27

    There is a very nice blog post from Dan O'Huiginn on the topic of nested dictionaries. He ultimately suggest subclassing dict with a class that handles nesting better. Here is the subclass modified to handle your case trying to access keys of non-dict values:

    class ndict(dict):
         def __getitem__(self, key):
             if key in self: return self.get(key)
             return self.setdefault(key, ndict())
    

    You can reference nested existing keys or ones that don't exist. You can safely use the bracket notation for access rather than .get(). If a key doesn't exist on a NestedDict object, you will get back an empty NestedDict object. The initialization is a little wordy, but if you need the functionality, it could work out for you. Here are some examples:

    In [97]: x = ndict({'key1': ndict({'attr1':1, 'attr2':2})})
    
    In [98]: x
    Out[98]: {'key1': {'attr1': 1, 'attr2': 2}}
    
    In [99]: x['key1']
    Out[99]: {'attr1': 1, 'attr2': 2}
    
    In [100]: x['key1']['key2']
    Out[100]: {}
    
    In [101]: x['key2']['key2']
    Out[101]: {}
    
    In [102]: x['key1']['attr1']
    Out[102]: 1
    

提交回复
热议问题