Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】辞書の文字列表現を辞書オブジェクトに変換する方法

Pythonでは、str()関数を使うことで、辞書オブジェクトを簡単に文字列へ変換できます。

>>> D1={'1':1, '2':2, '3':3}
>>> D1
{'1': 1, '2': 2, '3': 3}
>>> str(D1)
"{'1': 1, '2': 2, '3': 3}"

eval()関数で文字列を辞書に戻す

逆に、文字列を辞書に変換するには、その文字列が辞書として有効な表現になっている必要があります。この変換にはeval()関数が利用できます。

>>> D1={'1':1, '2':2, '3':3}
>>> s=str(D1)
>>> s
"{'1': 1, '2': 2, '3': 3}"
>>> D2=eval(s)
>>> D2
{'1': 1, '2': 2, '3': 3}

ただし、eval()は任意のPythonコードを実行できてしまうため、外部から受け取った信頼できない文字列に対して使うのは危険です。そのような場合には、次に紹介する安全な方法を使用しましょう。

ast.literal_eval()で安全に変換する

Pythonの標準ライブラリ「Abstract Syntax Tree(ast)」モジュールには、有効なPythonリテラル構造のみを安全に評価するliteral_eval()メソッドが用意されています。文字列を辞書に変換する際は、セキュリティの観点からこの方法が推奨されます。

>>> D1={'1':1, '2':2, '3':3}
>>> s=str(D1)
>>> import ast
>>> D2=ast.literal_eval(s)
>>> D2
{'1': 1, '2': 2, '3': 3}
  1. 【Python】辞書形式の文字列をdict型に変換する2つの安全な方法

    はじめにPythonでは、文字列として表現された辞書(例:{foo: bar})を、実際の辞書(dict型)オブジェクトに変換したい場面がよくあります。この記事では、代表的な2つの変換方法である ast.literal_eval() と json.loads() の使い方を解説します。方法1: ast.literal_eval() を使うast.literal_eval() を使うと、文字列をPythonの式として安全に評価できます。この関数は、式ノードまたはPython式を含む文字列を評価しますが、許可されているのは文字列・数値・タプル・リスト・辞書・ブール値・Noneといったリテラル構造の

  2. Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】

    Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ