88

リストと同じように見える文字列があります。たとえば、次のようにします。

fruits = "['apple', 'orange', 'banana']"

それをリストオブジェクトに変換する方法は何でしょうか?

4

3 に答える 3

128
>>> fruits = "['apple', 'orange', 'banana']"
>>> import ast
>>> fruits = ast.literal_eval(fruits)
>>> fruits
['apple', 'orange', 'banana']
>>> fruits[1]
'orange'

コメントで指摘されているように、ast.literal_eval安全です。ドキュメントから:

式ノードまたはPython式を含む文字列を安全に評価します。提供される文字列またはノードは、次のPythonリテラル構造のみで構成されます:文字列、数値、タプル、リスト、dict、ブール値、およびなし。

これは、値を自分で解析することなく、信頼できないソースからのPython式を含む文字列を安全に評価するために使用できます。

于 2012-05-27T17:28:53.987 に答える
32

への簡単な呼び出しは次のようにeval()なります。

fruits = eval("['apple', 'orange', 'banana']")
fruits
> ['apple', 'orange', 'banana']

または、この記事で説明されているように、同じことをもう少し安全に行うことができます(つまり、意図しない副作用や悪意のあるコードインジェクションのリスクを冒すことなく)。

fruits = eval("['apple', 'orange', 'banana']", {'__builtins__':None}, {})

このソリューションには、追加のモジュールに依存しないという利点があります。

于 2012-05-27T17:31:05.180 に答える
2

これがast.literal_evalの目的だと思います。

http://docs.python.org/library/ast.html#ast.literal_eval

于 2012-05-27T17:27:15.863 に答える