简体   繁体   中英

I have list which have keys of dictionary. How to access the dictionary using these keys dynamically

I have list which have keys of dictionary. How to access the dictionary using these keys dynamically. eg

key_store = ['test','test1']

mydict = {"test":{'test1':"value"},"test3":"value"}

So how to access mydict using key_store I want to access mydict['test']['test1'] .

Note: key_store store depth of keyword means it have keywords only its value will be dictionary like test have dictionary so it have 'test','test1'

Use recursion:

def get_value(d, k, i):
    if not isinstance(d[k[i]], dict):
        return d[k[i]]
    return get_value(d[k[i]], k, i+1)

The parameters are the dictionary, the list and an index you'll be running on.

The stop condition is simple; Once the value is not a dictionary, you want to return it, otherwise you continue to travel on the dictionary with the next element in the list.


>>> key_store = ['test','test1']
>>> Dict = {"test":{'test1':"value"},"test3":"value"}
>>> def get_value(d, k, i):
...     if isinstance(d[k[i]], str):
...         return d[k[i]]
...     return get_value(d[k[i]], k, i+1)
...
>>> get_value(Dict, key_store, 0)
'value'

You can do this with a simple for-loop.

def get_nested_key(keypath, nested_dict):
    d = nested_dict
    for key in keypath:
        d = d[keypath]
    return d

>>> get_nested_key(('test', 'test1'), Dict)

Add error checking as required.

You could do this with a simple dictionary reduce:

>>> mydict = {"test": {'test1': "value"}, "test3": "value"}
>>> print reduce(dict.get, ['test', 'test1'], mydict)
value

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM