/ pytlib / utils / dict_utils.py
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