Как преобразовать список списков (типом строка) в список?

Покапал интернет - не нашел ничего. Решил написать свой обработчик, но код длинный получился:

def decode_in_lst(str_in):
    out_lst = []
    level = 0
    cachDict = {}
    cash= ''
    for character in str_in:
        if character == '[':
            level += 1
            cachDict[level] = []
            continue
        if character == ']':
            continue
        if character not in [' ', ',', '"', '\'']:
            cash += character
        else:
            if cash != '':
                cachDict[level].append(cash)
                cash = ''
    for key, value in cachDict.items():
        if key != 1:
            out_lst.append(value)
    return out_lst
str_sample = str([['757070', '757070'], ['757070', '44546A', 'E7E6E6', '3F3F3F', '595959', 'BFBFBF', 'FFC000', '5B9BD5', '70AD47', '0563C1', '954F72']])
print('str_sample=',str_sample, type(str_sample))

str_out = decode_in_lst(str_in=str_sample)
print('str_out:', str_out, type(str_out))

Выдаст:

str_sample= [['757070', '757070'], ['757070', '44546A', 'E7E6E6', '3F3F3F', '595959', 'BFBFBF', 'FFC000', '5B9BD5', '70AD47', '0563C1', '954F72']] <class 'str'>
str_out: [['757070', '757070'], ['757070', '44546A', 'E7E6E6', '3F3F3F', '595959', 'BFBFBF', 'FFC000', '5B9BD5', '70AD47', '0563C1', '954F72']] <class 'list'>

Собственно сам вопрос: есть стандартная библиотека от питона, которая тоже самое делает?


Ответы (1 шт):

Автор решения: D.Vinogradov

Есть библиотека ast, в которой есть literal_eval.

Может преобразовать и в словарь и в список, если у вас на входе строка

from ast import literal_eval

a = str([['757070', '757070'], ['757070', '44546A', 'E7E6E6', '3F3F3F', '595959', 'BFBFBF', 'FFC000', '5B9BD5',
                             '70AD47', '0563C1', '954F72']])
>>> type(a)
<class 'str'>

>>> type(literal_eval(a))
<class 'list'>

Плюс есть встроенный eval

>>> type(eval(a))
<class 'list'>

Однако классический eval использовать опасно, поэтому для строк лучше использовать первый вариант.

→ Ссылка