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

【Python入門】文字列形式の辞書を辞書オブジェクトに変換する2つの方法

この記事では、文字列として表現された辞書を、キーと値のペアを持つ通常のPython辞書オブジェクトに変換する方法を解説します。主な方法としてjson.loads()ast.literal_eval()の2つを紹介します。

方法1:json.loads() を使う

jsonモジュールのloads()関数は、JSON形式の文字列を解析し、データ構造を保持したままPythonオブジェクトへ変換します。文字列化された辞書を引数として渡すだけで、通常の辞書として結果を取得できます。

サンプルコード

import json
stringA = '{"Mon" : 3, "Wed" : 5, "Fri" : 7}'
# 与えられた文字列形式の辞書
print("Given string : \n",stringA)
# json.loads()を使用して変換
res = json.loads(stringA)
# 結果を表示
print("The converted dictionary : \n",res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given string :
{"Mon" : 3, "Wed" : 5, "Fri" : 7}
The converted dictionary :
{'Mon': 3, 'Wed': 5, 'Fri': 7}

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

astモジュールのliteral_eval()関数も同様の動作を行います。この関数は文字列をPythonリテラルとして安全に評価するため、文字列として含まれる辞書がそのまま通常の辞書オブジェクトに変換されます。

サンプルコード

import ast
stringA = '{"Mon" : 3, "Wed" : 5, "Fri" : 7}'
# 与えられた文字列形式の辞書
print("Given string : \n",stringA)
# ast.literal_eval()を使用して変換
res = ast.literal_eval(stringA)
# 結果を表示
print("The converted dictionary : \n",res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given string :
{"Mon" : 3, "Wed" : 5, "Fri" : 7}
The converted dictionary :
{'Fri': 7, 'Mon': 3, 'Wed': 5}

2つの方法の違いと使い分け

json.loads()は厳密なJSON形式(キーと文字列値はダブルクォート「"」で囲む)を要求します。一方、ast.literal_eval()はシングルクォートやタプルなど、Pythonのリテラル構文全般を扱えるため、より柔軟です。ただし、外部からの入力を扱う場合は、信頼できるデータであることを確認した上で使用してください。JSON形式のデータであればjson.loads()、Python独自のリテラル表現であればast.literal_eval()を選ぶのが基本です。

  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のtranslate()メソッドで文字列を一括置換・翻訳する方法

    Pythonでは、文字列内の複数の文字をまとめて別の文字に置き換えたい場合、translate()メソッドを使うと効率的です。このメソッドは、str.maketrans()関数で作成した変換テーブルに基づいて文字を変換した新しい文字列のコピーを返します。また、オプションとして削除したい文字を指定すれば、該当する文字をすべて取り除くことも可能です。基本的な使い方以下の例では、母音「aeiou」をそれぞれ数字「12345」に対応付けて文字列を変換しています。intab = aeiou outtab = 12345 trantab = str.maketrans(intab, outtab) st