Как преобразовать список списков (типом строка) в список?
Покапал интернет - не нашел ничего. Решил написать свой обработчик, но код длинный получился:
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 использовать опасно, поэтому для строк лучше использовать первый вариант.