Returns a subset of given dictionary, omitting specified keys.

    :param keys: Iterable of keys to exclude
    :param strict: Whether ``keys`` are required to exist in the dictionary

    :return: Dictionary filtered by omitting ``keys``

    :raise KeyError: If ``strict`` is True and one of ``keys`` is not found
                     in the dictionary

    .. versionadded:: 0.0.2

def omit(keys, from_, strict=False):
    """Returns a subset of given dictionary, omitting specified keys.

    :param keys: Iterable of keys to exclude
    :param strict: Whether ``keys`` are required to exist in the dictionary

    :return: Dictionary filtered by omitting ``keys``

    :raise KeyError: If ``strict`` is True and one of ``keys`` is not found
                     in the dictionary

    .. versionadded:: 0.0.2
    """
    ensure_iterable(keys)
    ensure_mapping(from_)

    if strict:
        remaining_keys = set(iterkeys(from_))
        remove_subset(remaining_keys, keys)  # raises KeyError if necessary
    else:
        remaining_keys = set(iterkeys(from_)) - set(keys)

    return from_.__class__((k, from_[k]) for k in remaining_keys)