He estado intentando stringify a list y list of list y luego convertirlo de nuevo a su forma original. Los siguientes son mis 2 ejemplos lists:

option_list = ['1309', '1P09', 'Bdg 1', '1226', 'Bdg 1']
option_listoflist = [['1309', 'Blg 1', 500], ['1P09', 'Bdg 1', 4501], ['1226', 'Bdg 1', 600], ['1302', 'Bdg 1', 1432]]

Escribí este código python, basado en algunas publicaciones SO, donde estoy tratando de stringify los 2 lists anteriores y luego trato de convertirlos nuevamente, pero arroja un error:

str1 = ''.join(option_list)
print(str1+'\n')
str_2_list = ast.literal_eval(str1)
print(str_2_list)

str2 = ''.join(option_listoflist)
print(str2+'\n')
str_2_listoflist = ast.literal_eval(str2)
print(str_2_listoflist)

Cuando ejecuto esto obtengo el error invalid syntax en str_2_list = ast.literal_eval(str1).

¿Cómo puedo stringify a list y list of list y luego convertirlo de nuevo a su forma original?

NOTA: lo que quiero hacer es convertir ['1309', '1P09', 'Bdg 1', '1226', 'Bdg 1'] a una versión de cadena como esta "['1309', '1P09', 'Bdg 1', '1226', 'Bdg 1']" y luego volver a convertirlo en la lista original. Del mismo modo para una lista de la lista

1
user2966197 2 mar. 2018 a las 09:21

3 respuestas

La mejor respuesta

Ya que parece estar intentando replicar JSON.stringify de JavaScript, simplemente use el módulo json para hacer exactamente eso:

In [1]: import json

In [2]: option_list = ['1309', '1P09', 'Bdg 1', '1226', 'Bdg 1']

In [3]: option_listoflist = [['1309', 'Blg 1', 500], ['1P09', 'Bdg 1', 4501], ['1226', 'Bdg 1', 600], ['1302', 'Bdg 1', 1432]]

In [4]: json.dumps(option_list)
Out[4]: '["1309", "1P09", "Bdg 1", "1226", "Bdg 1"]'

In [5]: json.dumps(option_listoflist)
Out[5]: '[["1309", "Blg 1", 500], ["1P09", "Bdg 1", 4501], ["1226", "Bdg 1", 600], ["1302", "Bdg 1", 1432]]'

In [6]: json.loads(json.dumps(option_list)) == option_list
Out[6]: True

In [7]: json.loads(json.dumps(option_listoflist)) == option_listoflist
Out[7]: True
1
Blender 2 mar. 2018 a las 06:40

Su ''.join(option_list) genera '13091P09Bdg 11226Bdg 1' que no se puede convertir a la lista porque la cadena de salida no sigue la sintaxis de la lista.

Código creado

option_list = ['1309', '1P09', 'Bdg 1', '1226', 'Bdg 1']
option_listoflist = [['1309', 'Blg 1', 500], ['1P09', 'Bdg 1', 4501], ['1226', 'Bdg 1', 600],['1302', 'Bdg 1', 1432]]
str1 = ','.join(option_list)
print(str1+'\n')
str_2_list = str1.split(',')
print(str_2_list)

str2 = ','.join(str(item) for innerlist in option_listoflist for item in innerlist)
print(str2+'\n')
str_2_listoflist=[str2.split(',')[i:i+3] for i in range(0, len(str2.split(',')), 3)]
for i in str_2_listoflist:
  i[2]=int(i[2])
print(str_2_listoflist)

Salida:

1309,1P09, Bdg 1,1226, Bdg 1

['1309', '1P09', 'Bdg 1', '1226', 'Bdg 1']

1309, Blg 1,500,1P09, Bdg 1,4501,1226, Bdg 1,600,1302, Bdg 1,1432

[['1309', 'Blg 1', 500], ['1P09', 'Bdg 1', 4501], ['1226', 'Bdg 1', 600], ['1302', 'Bdg 1', 1432]]

0
Jay Shankar Gupta 2 mar. 2018 a las 07:02

Lo estás haciendo mal: conversión a cadena. Prueba str1 = str(options_list)

1
Aleksandr K. 2 mar. 2018 a las 06:31