我有一個字符串,如下所示:"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
。不使用Eval將字符串轉換爲Python列表?
我想將其轉換爲列表。我知道我可以使用eval(字符串)來獲取列表,但是eval因爲它有可能發生災難(並且因爲我可以得到一個非列表作爲有效輸出)而嚇到我。是否有另一種更安全/更安全的方式將此字符串轉換爲列表?我知道這是一個列表,任何不是列表的都是無效數據(應該檢查和/或拋出錯誤)。
我有一個字符串,如下所示:"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
。不使用Eval將字符串轉換爲Python列表?
我想將其轉換爲列表。我知道我可以使用eval(字符串)來獲取列表,但是eval因爲它有可能發生災難(並且因爲我可以得到一個非列表作爲有效輸出)而嚇到我。是否有另一種更安全/更安全的方式將此字符串轉換爲列表?我知道這是一個列表,任何不是列表的都是無效數據(應該檢查和/或拋出錯誤)。
如果你堅持這樣做,你可以使用ast.literal_eval函數。
>>> import ast
>>> foo = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
>>> ast.literal_eval(foo)
[['Cheese', 72], ['Milk', 45], ['Bread', 22]]
我相信其他人會告訴你,你可能會做錯事,或使用像JSON庫傳輸任意數據結構像這樣的,我不會反對。
爲了防止有人得到ValueError,記得先將foo改爲字符串,然後應用ast.literal_eval(foo) – techriften
嘗試使用json
module:
import json
s = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
s = s.replace("'", '"')
print json.loads(s)
你可能會考慮使用json
模塊反序列化,並確保您的字符串是在json format。
有關使用此模塊的詳細信息,請參閱http://docs.python.org/2/library/json.html。
以下是一種方法: exec(「list =」+ foo) 這應該使變量'list'與字符串中的列表轉換爲真實的列表。 這也適用於字符串中的字典,數組,布爾等。
我不是Python專家。這真的比使用'eval'更好嗎?它不是仍然可以被利用嗎? – jerry
你會想看看這個模塊:http://docs.python.org/2/library/ast.html – squiguy
作爲一個背景:我繼承了一個Django應用程序,其中以前的開發人員存儲了一個項目列表在數據庫表中作爲字符串。它不會*以這種方式完成,我不反對使用數據遷移來轉換爲JSON,但如果有「祕密握手」來解析列表,那麼我很好。 –