2013-07-08 57 views
0

我難倒這個:字符串轉換成列出

我有一個假想包含其他名單,但現在他們都在蟒蛇被解讀爲STR像這樣的列表:

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爲「大紅色按鈕」**不寒而慄** –