2015-06-07 76 views
3

嵌套結構,我有我目前使用像字符串轉換爲像列表

str_sample = "[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]" 

的字符串:

exec("str2list_sample = "+ str_sample) 

是否有這樣做的任何更簡潔的方法?

回答

4

首先不要將變量的名稱命名爲str,因爲它會隱藏內置的變量。

解決你的問題,你可以使用ast.literal_eval

>>> a = "[[1, 2], [2.0, 0.3], ['a', 'b']]" 
>>> import ast 
>>> ast.literal_eval(a) 
[[1, 2], [2.0, 0.3], ['a', 'b']] 

爲了解決您的最新編輯

>>> str_sample = "[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]" 
>>> ast.literal_eval(str_sample) 
[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]] 
+0

@Gurupad我猜您現在可以停止向列表添加更多元素;) –

+0

想要有一些基本的元素。 –

2

使用eval,但這不是一個good practice

eval("[[1, 2], [2.0, 0.3], ['a', 'b']]") 
[[1, 2], [2.0, 0.3], ['a', 'b']] 
+0

我需要加載數百萬個列表。爲什麼這不是一個好習慣? –

+0

使用eval是,Bhargav給出的答案相當不錯,'literal_eval'如果不是有效的數據類型會引發異常,但'eval'將評估所有python表達式,因此您需要確保輸入的內容eval不是危險的。 –

+1

@NamitSingal在你未來的所有答案中,請添加一個鏈接到[this](http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html)美麗的解釋,爲什麼'eval'不好。 –