def nested_item_delim_parser(param_value, item_delimiter=",", item_splitter="|"):
    """
    A parser for lists of items with a delimter where each item has a splitter (e.g. for name, version tuples)
    e.g. a|b,c|d,e|f -> {'a':'b', 'c':'d', 'e':'f'}

    :param param_value: the value to parse
    :param item_delimiter: string to delimit items
    :param item_splitter: string to split item key value pairs on
    :return:
    """
    matches = {}
    if not param_value:
        return matches

    try:
        for param in param_value.strip().split(item_delimiter):
            param = param.strip()
            if param != [""]:
                k, v = param.split(item_splitter)
                matches[k.strip()] = v.strip()
    except:
        raise ValueError(param_value)

    return matches