def split_dict_lists(li):
    """Splits a list of dicts into: a dict with all constants, and a list of dicts where the values
    vary across different dicts in the input list.
    
    :param li: List of dicts.
    :returns: (dict, [dict])
    """
    def _all_same_values(li, key):
        """See if all the dicts have the same value for a given key."""
        check = None
        for d in li:
            if check is None:
                check = d[key]
            elif check != d[key]:
               return False
        return True
    
    constant_keys = {key : _all_same_values(li, key) for key in li[0].keys()}
    constants = {k:v for k,v in li[0].items() if constant_keys[k]}
    iterables = [{k:v for k,v in d.items() if not constant_keys[k]} for d in li]
    return constants, iterables