code: def dottable_getitem(data, dottable_key, default=None):
      
      def getitem(value, *keys):
          if not keys:
              return default
          elif len(keys) == 1:
              key = keys[0]
              if isinstance(value, MutableMapping):
                  return value.get(key, default)
              elif isinstance(value, Sequence) and \
                      not isinstance(value, six.string_types):
                  return [getitem(v, key) for v in value]
              return default
          return getitem(getitem(value, keys[0]), *keys[1:])
      return getitem(data, *dottable_key.split('.'))
docs: Return item as ``dict.__getitem__` but using keys with dots.
  
      It does not address indexes in iterables.