Extended dict for Python. Make easy to extract complicated nested dict.
pip3 install dict-path
test_dict = {'foo1':{'foo2':{'foo3':{'foo4':'bar'}}}}
foo1 = test_dict['foo1']
if foo1:
foo2 = foo1['foo2']
if foo2:
foo3 = foo2['foo3']
if foo3:
foo4 = foo3['foo4'] #finally, get the result: bar1
test_dict = {'foo1':{'foo2':{'foo3':{'foo4':'bar'}}}}
data = DictPath(test_dict)
data.get('foo1/foo2/foo3/foo4') #result: bar
data.set('foo1/foo2/foo3/foo5', 'bar1')
data.get('foo1/foo2/foo3/foo5') #result: bar1
from dict_path import extract_dict, inject_dict
test_dict = {'foo1':{'foo2':{'foo3':{'foo4':'bar'}}}}
extract_dict(test_dict, 'foo1/foo2/foo3/foo4') #result: bar
inject_dict(test_dict, 'foo1/foo2/foo3/foo5', 'bar1')}
extract_dict(test_dict, 'foo1/foo2/foo3/foo5') #result: bar1
# A DictPath keeps a reference to the original initializing dict:
normal_dict = {'foo1':{'foo2':{'foo3':{'foo4':'bar'}}}}
dic_path = DictPath(normal_dict)
> normal_dict == dic_path
---> True
> dic_path.dict is normal_dict
---> True
joe = DictPath(user, deepcopy=True)
> joe == user
---> True
> joe.dict is user
---> False
from dict_path import DictPath
test_dict = {'foo1':{'foo2':{'foo3':{'foo4':'bar'}}}}
data = DictPath(test_dict)
data.get('foo1/foo2/foo3/foo4/foo6')
#result: None
from dict_path import DictPath
test_dict = {'foo1':{'foo2':{'foo3':{'foo4':'bar'}}}}
data = DictPath(test_dict)
data.set('foo1/foo2/foo3/foo5/foo6/foo7/foo8/', 'bar1')
data.get('foo1/foo2/foo3/foo5/foo6/foo7/foo8/')
#result: bar1
Note: For now its only working with get or extract_dict.
from dict_path import extract_dict, DictPath
test_dict = {'foo1':{'foo2':[{'foo3':'bar'},{'foo4':[[{'foo5': 'bar'}]]}]}}
data = DictPath(test_dict)
data.get('foo1/foo2/1/foo4/0/0/foo5/')
#result: bar
extract_dict(test_dict, 'foo1/foo2/1/foo4/0/0/foo5/')
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.