r"""
    Parses a list of items in the format
    ['var1:val1', 'var2:val2', 'var3:val3']
    the '=' character can be used instead of the ':' character if desired

    TODO: see ut.parse_cfgstr3

    Args:
        cfgstr_list (list):

    Returns:
        dict: cfgdict

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_arg import *  # NOQA
        >>> import utool as ut
        >>> cfgstr_list = ['var1=val1', 'var2=1', 'var3=1.0', 'var4=None', 'var5=[1,2,3]', 'var6=(a,b,c)']
        >>> smartcast = True
        >>> cfgdict = parse_cfgstr_list(cfgstr_list, smartcast, oldmode=False)
        >>> result = ut.repr2(cfgdict, sorted_=True, newlines=False)
        >>> print(result)
        {'var1': 'val1', 'var2': 1, 'var3': 1.0, 'var4': None, 'var5': [1, 2, 3], 'var6': ('a', 'b', 'c')}

        {'var1': 'val1', 'var2': 1, 'var3': 1.0, 'var4': None}

        {'var4': None, 'var1': 'val1', 'var3': 1.0, 'var2': 1}

def parse_cfgstr_list(cfgstr_list, smartcast=True, oldmode=True):
    r"""
    Parses a list of items in the format
    ['var1:val1', 'var2:val2', 'var3:val3']
    the '=' character can be used instead of the ':' character if desired

    TODO: see ut.parse_cfgstr3

    Args:
        cfgstr_list (list):

    Returns:
        dict: cfgdict

    Example:
        >>> # ENABLE_DOCTEST
        >>> from utool.util_arg import *  # NOQA
        >>> import utool as ut
        >>> cfgstr_list = ['var1=val1', 'var2=1', 'var3=1.0', 'var4=None', 'var5=[1,2,3]', 'var6=(a,b,c)']
        >>> smartcast = True
        >>> cfgdict = parse_cfgstr_list(cfgstr_list, smartcast, oldmode=False)
        >>> result = ut.repr2(cfgdict, sorted_=True, newlines=False)
        >>> print(result)
        {'var1': 'val1', 'var2': 1, 'var3': 1.0, 'var4': None, 'var5': [1, 2, 3], 'var6': ('a', 'b', 'c')}

        {'var1': 'val1', 'var2': 1, 'var3': 1.0, 'var4': None}

        {'var4': None, 'var1': 'val1', 'var3': 1.0, 'var2': 1}
    """
    cfgdict = {}
    for item in cfgstr_list:
        if item == '':
            continue
        if oldmode:
            keyval_tup = item.replace('=', ':').split(':')
            assert len(keyval_tup) == 2, '[!] Invalid cfgitem=%r' % (item,)
            key, val = keyval_tup
        else:
            keyval_tup = item.split('=')
            if len(keyval_tup) == 1:
                # single specifications are interpeted as booleans
                key = keyval_tup[0]
                val = True
            else:
                assert len(keyval_tup) >= 2, '[!] Invalid cfgitem=%r' % (item,)
                key, val = keyval_tup[0], '='.join(keyval_tup[1:])
        if smartcast:
            val = util_type.smart_cast2(val)
        cfgdict[key] = val
    return cfgdict