def get_in(obj, lookup, default=None):
    """ Walk obj via __getitem__ for each lookup,
    returning the final value of the lookup or default.
    """
    tmp = obj
    for l in lookup:
        try:  # pragma: no cover
            tmp = tmp[l]
        except (KeyError, IndexError, TypeError):  # pragma: no cover
            return default
    return tmp