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

【Python】辞書形式の文字列をdict型に変換する2つの安全な方法

はじめに

Pythonでは、文字列として表現された辞書(例:"{'foo': 'bar'}")を、実際の辞書(dict型)オブジェクトに変換したい場面がよくあります。この記事では、代表的な2つの変換方法である ast.literal_eval()json.loads() の使い方を解説します。

方法1: ast.literal_eval() を使う

ast.literal_eval() を使うと、文字列をPythonの式として安全に評価できます。この関数は、式ノードまたはPython式を含む文字列を評価しますが、許可されているのは文字列・数値・タプル・リスト・辞書・ブール値・Noneといったリテラル構造のみです。そのため、任意のコードを実行される危険性がなく、信頼できない入力を扱う場合にも比較的安全です。

以下は具体的な使用例です。

s = "{'baz' : 'lol', 'foo' : 'bar'}"
import ast
s = ast.literal_eval(s)
print(s['foo'], s['baz'])

このコードを実行すると、次の出力が得られます。

bar lol

方法2: jsonモジュールを使う

辞書はJSON文字列と非常に似た構造を持っているため、json モジュールを使って文字列を辞書に変換することもできます。json.loads() はJSON形式の文字列を解析し、Pythonのオブジェクトに変換してくれます。

>>> import json
>>> x = json.loads("{'foo' : 'bar', 'hello' : 'world'}")
>>> type(x)
<class 'dict'>

使い分けのポイント

  • ast.literal_eval(): Pythonのリテラル表記そのままの文字列(シングルクォートを含むなど)を扱えるため、Python形式の文字列に向いています。
  • json.loads(): 厳密なJSON形式(キーと文字列はダブルクォート必須)が必要ですが、APIレスポンスなどJSONデータの処理にはこちらが標準的です。

用途に応じて適切な方法を選択することで、文字列から辞書への変換を安全かつ効率的に行えます。

  1. Pythonで文字列をバイナリ(2進数)に変換する方法をわかりやすく解説

    Pythonで文字列をバイナリに変換する基本の考え方Pythonで文字列をバイナリ(2進数)表現に変換するには、文字列内の各文字を1つずつ取り出し、それぞれを2進数へ変換したうえで、結果をひとつの文字列として連結します。各文字の文字コードは ord() 関数で取得でき、format() 関数に「b」フォーマット指定子を渡すことで、簡単に2進数形式へ整形できます。format() と ord() を使った変換方法最もシンプルなのが、format(ord(x), b) を使って各文字 x を2進数の文字列に変換する方法です。次の例では、文字列 hello world の各文字をスペース区切りのバイ

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

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