docs: def access_dict_like_obj(obj, prop, new_value=None):
      """
      Access a dictionary like if it was an object with properties.
      If no "new_value", then it's a getter, otherwise it's a setter.
      >>> {'characters': {'cast': 'Jean-Luc Picard', 'featuring': 'Deanna Troi'}}
      >>> access_dict_like_obj(startrek, 'characters.cast', 'Pierce Brosnan')
      """
      props = prop.split('.')
      if new_value:
          if props[0] not in obj: obj[props[0]] = {}
          if len(props)==1: obj[prop] = new_value
          else: return access_dict_like_obj(obj[props[0]], '.'.join(props[1:]), new_value)
      else:
          if len(props)==1: return obj[prop]
          else: return access_dict_like_obj(obj[props[0]], '.'.join(props[1:]))