4

次のような文字列があります"[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"

これをリストに変換したい。eval(string) を使用してリストを取得できることはわかっていますが、eval は大惨事の可能性があるため (また、有効な出力として非リストを取得できるため)、私を怖がらせます。この文字列をリストに変換する別のより安全な方法はありますか? 私はそれがリストであり、リストではないものは無効なデータであることを知っています(チェックするか、エラーをスローする必要があります)。

4

4 に答える 4

6

この方法を主張する場合は、ast.literal_eval 関数を使用できます。

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

何か間違ったことをしている可能性が高い、またはJSONのようなライブラリを使用してこのような任意のデータ構造を転送する可能性が高いと他の人が言うでしょう。

于 2013-10-24T23:58:48.140 に答える
4

jsonモジュールを使用してみてください:

import json
s = "[['Cheese', 72], ['Milk', 45], ['Bread', 22]]"
s = s.replace("'", '"')
print json.loads(s)
于 2013-10-24T23:58:57.723 に答える
1

jsonモジュールを使用してデシリアライズし、文字列がjson 形式であることを確認することを検討してください。

このモジュールの使用方法の詳細については、http://docs.python.org/2/library/json.htmlを参照してください。

于 2013-10-24T23:58:58.643 に答える
0

1 つの方法を次に示します。 exec("list = "+foo) これにより、文字列内のリストが実際のリストに変換された変数 'list' が作成されます。これは、文字列内の辞書、配列、ブールなどでも機能します。

于 2014-01-21T01:45:36.830 に答える