dict_utils.py
1 from past.builtins import basestring 2 def format_path(path): 3 if isinstance(path, basestring): 4 return path.split('.') 5 else: 6 return path 7 8 def get_deep(d,path,default=None): 9 val = d 10 path = format_path(path) 11 for key in path: 12 if not isinstance(val,dict): 13 return default 14 if(key.isdigit() and isinstance(val,list)): 15 val = val[int(key)] 16 else: 17 val = val.get(key) 18 return val if val is not None else default 19 20 def set_deep(d, path, value): 21 path = format_path(path) 22 for key in path[:-1]: 23 if(key.isdigit() and isinstance(d, list)): 24 d = d[int(key)] 25 else: 26 d = d.setdefault(key, {}) 27 if(path[-1].isdigit() and isinstance(d, list)): 28 d[int(path[-1])] = value 29 else: 30 d[path[-1]] = value