Recursively apply a function to all levels of nested iterables

    :param inval: the object to run the function on
    :param func: the function that will be run on the inval

def recursive_apply(inval, func):
    '''Recursively apply a function to all levels of nested iterables

    :param inval: the object to run the function on
    :param func: the function that will be run on the inval
    '''
    if isinstance(inval, dict):
        return {k: recursive_apply(v, func) for k, v in inval.items()}
    elif isinstance(inval, list):
        return [recursive_apply(v, func) for v in inval]
    else:
        return func(inval)