2013-07-08 4 views
0

Я озадачен на это:Преобразовать строки в список

У меня есть список, который якобы содержит другие списки, но сейчас они читаются, как ул в питона, как это:

YACKETY = [ "[ '11111', '3000', 'USD', '0'] "," ['11112', '3000', 'USD', '0'] "," ['11113', '3000', 'USD ',' 0 '] "," [' 11114 ',' 3000 ',' USD ',' 0 '] "]

Но каждый из элементов в YACKETY также должен быть списком, прямо сейчас они являются строками. Я хочу, чтобы каждый из этих элементов в YACKETY снова стал изменчивым списком. Как я могу подойти к этому?

Кортежи неизменяемы, так что это решение, поскольку я хочу, чтобы элементы в этих списках в YACKETY изменялись.

ответ

3

использование ast.literal_eval для безопасного преобразования из строки в списках.

>>> import ast 
>>> YACKETY = ["['11111', '3000', 'USD', '0']", "['11112', '3000', 'USD', '0']", "['11113', '3000', 'USD', '0']", "['11114', '3000', 'USD', '0']"] 
>>> converted = [ast.literal_eval(x) for x in YACKETY] 
>>> converted 
[['11111', '3000', 'USD', '0'], ['11112', '3000', 'USD', '0'], ['11113', '3000', 'USD', '0'], ['11114', '3000', 'USD', '0']] 
+0

Или 'map (ast.literal_eval, YACKETY)' – TerryA

+0

@Haidro Понимание списка кажется более предпочтительным по сравнению с картографией и фильтром. http://www.artima.com/weblogs/viewpost.jsp?thread=98196 – DhruvPathak

+0

Большое спасибо! Я понял! – user2559679

0

В идеале правильный подход заключается в том, чтобы выяснить, где эти списки превращаются в строки, и прекратить это. Каждый элемент в YACKETY - это список, который был передан str(). Поскольку вы не хотите, чтобы они были строками, вы, вероятно, захотите выяснить, почему эти списки передаются на str() и исправляют это.

Если вы не можете контролировать, что всегда есть большая красная кнопка:

yacklist = [eval(item) for item in YACKETY] 
+0

'eval' не рекомендуется. – DhruvPathak

+0

+1 для «большой красной кнопки» ** содрогаться ** –

Смежные вопросы