2013-10-24 25 views
1

我有一個字符串,如下所示:"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"不使用Eval將字符串轉換爲Python列表?

我想將其轉換爲列表。我知道我可以使用eval(字符串)來獲取列表,但是eval因爲它有可能發生災難(並且因爲我可以得到一個非列表作爲有效輸出)而嚇到我。是否有另一種更安全/更安全的方式將此字符串轉換爲列表?我知道這是一個列表,任何不是列表的都是無效數據(應該檢查和/或拋出錯誤)。

+1

你會想看看這個模塊:http://docs.python.org/2/library/ast.html – squiguy

+0

作爲一個背景:我繼承了一個Django應用程序,其中以前的開發人員存儲了一個項目列表在數據庫表中作爲字符串。它不會*以這種方式完成,我不反對使用數據遷移來轉換爲JSON,但如果有「祕密握手」來解析列表,那麼我很好。 –

回答

3

如果你堅持這樣做,你可以使用ast.literal_eval函數。

>>> import ast 
>>> foo = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]" 
>>> ast.literal_eval(foo) 
[['Cheese', 72], ['Milk', 45], ['Bread', 22]] 

我相信其他人會告訴你,你可能會做錯事,或使用像JSON庫傳輸任意數據結構像這樣的,我不會反對。

+0

爲了防止有人得到ValueError,記得先將foo改爲字符串,然後應用ast.literal_eval(foo) – techriften

3

嘗試使用json module

import json 
s = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]" 
s = s.replace("'", '"') 
print json.loads(s) 
1

以下是一種方法: exec(「list =」+ foo) 這應該使變量'list'與字符串中的列表轉換爲真實的列表。 這也適用於字符串中的字典,數組,布爾等。

+0

我不是Python專家。這真的比使用'eval'更好嗎?它不是仍然可以被利用嗎? – jerry