Mam ciąg taki jak następujący:

"sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"

Chcę przekonwertować go na regularną listę jak:

list = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]

A potem mogę go przeanalizować lub robić wszystko, co może zrobić z listami. Próbowałem podzielić ciąg, ale nie działa, ponieważ wynik był ciąg.

Spróbuję nawet konwertować go za pomocą funkcji exec:

exec('func = lambda : {}; func()').string

Ale nic nie zwraca. Czy jest jakiś (czysty) sposób, aby przekonwertować ten rodzaj łańcucha na odpowiednią listę?

1
Mehdi 24 czerwiec 2017, 16:44

3 odpowiedzi

Najlepsza odpowiedź

Użyj literal_eval po podziale łańcucha wokół {{x0} }. Proszę zwrócić szczególną uwagę na dodatkową przestrzeń kończącej =, ponieważ konieczne jest zapewnienie, aby zapewnić prawidłową procedurę literal_eval. W przeciwnym razie będziesz miał wyjątek IndentationError: unexpected indent

Rozwiązanie:

from ast import literal_eval

s = "sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"

res = literal_eval(s.split('= ')[1])
print(res)
print(type(res))

Wynik:

[[61252, '1', '1', '30000', '2617', '2677', '15000', '1'], [61252, '2', '2', '72590', '2615', '2678', '15000', '1'], [61252, '3', '1', '9354', '2608', '2690', '709', '1']]
<class 'list'>

Extra Uwaga: Zauważyłem, że przypisałeś listę w swoim przykładzie do zmiennej wymienionej listy . Należy pamiętać, że lista EM> jest to wbudowana nazwa w Pythonie i za pomocą nazwy zmiennej będzie cień wbudowany i mógł prowadzić do problemów w kodzie.

6
idjaw 24 czerwiec 2017, 13:51

Just exec Ciąg

exec("sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]")
-2
vZ10 24 czerwiec 2017, 13:47

W twoim przypadku możesz po prostu pokroić sznur jak lista! Przyczyna ostatecznie jest lista znaków.

x="sring = [[61252,'1','1','30000','2617','2677','15000','1'],[61252,'2','2','72590','2615','2678','15000','1'],[61252,'3','1','9354','2608','2690','709','1']]"

x=x[x.index('['):x[::-1].index(']')*-1])) # if any trailing chars in staring 

W twoim przypadku możesz użyć x = x [x.index ('['):]

Spowoduje to pokrojanie sznurka, a następnie możesz użyć List_X = Eval (X), aby uzyskać rzeczywistą listę

1
DexJ 5 październik 2017, 08:47