3.

Pythonの辞書型(dict)を文字列(string)に変換する方法

編集
この記事の要点
  • Python で辞書 (dict) を文字列に変換する 4 つの方法
  • str(dict): 簡易、Python の dict 表記そのまま(シングルクォート)
  • json.dumps(dict): 標準 JSON 形式(ダブルクォート、推奨)
  • repr(dict): str() とほぼ同じ、デバッグ用
  • pprint.pformat(dict): 整形表示(ネストが深いとき向き)

 

方法 1: str() (簡易・非推奨用途)

もっとも簡単な方法。Python の dict リテラル表記をそのまま文字列化します。

d = {'name': 'Alice', 'age': 30}
s = str(d)
print(s)
# → "{'name': 'Alice', 'age': 30}"
print(type(s))
# → 

注意: 出力は Python 独自の表記(シングルクォート)。JSON として他言語に渡すとパースエラーになります。

方法 2: json.dumps() (推奨)

他システムやファイル・API レスポンスで使うなら json.dumps() を使います。標準の JSON 形式(ダブルクォート)で出力されます。

import json

d = {"name": "Alice", "age": 30, "tags": ["dev", "admin"]}
s = json.dumps(d)
print(s)
# → '{"name": "Alice", "age": 30, "tags": ["dev", "admin"]}'

# 日本語を含む場合は ensure_ascii=False
d = {"名前": "アリス"}
s = json.dumps(d, ensure_ascii=False)
print(s)
# → '{"名前": "アリス"}'

# 整形して出力
s = json.dumps(d, ensure_ascii=False, indent=2)
print(s)
# → {
#     "名前": "アリス"
#   }

json.dumps の主要オプション

オプション効果
indent=22 スペースでインデント整形
ensure_ascii=False日本語を のような escape にせずそのまま出力
sort_keys=Trueキーをアルファベット順にソート
separators=(',', ':')区切り文字をカスタマイズ(最小化等)
default=strJSON 非対応型(datetime 等)を str() で変換

方法 3: repr()

str() とほぼ同じ動作だが、より「再現可能な表現」を返すデバッグ用関数。

d = {'name': 'Alice', 'age': 30}
print(repr(d))
# → "{'name': 'Alice', 'age': 30}"

方法 4: pprint.pformat() (整形)

ネストが深い辞書を可読性高く整形したい場合。

from pprint import pformat

d = {
    "users": [
        {"name": "Alice", "age": 30, "tags": ["dev", "admin"]},
        {"name": "Bob", "age": 25, "tags": ["dev"]}
    ]
}
print(pformat(d))
# → {'users': [{'age': 30, 'name': 'Alice', 'tags': ['dev', 'admin']},
#               {'age': 25, 'name': 'Bob', 'tags': ['dev']}]}

逆変換: 文字列を辞書に戻す

JSON 文字列 → dict

import json
s = '{"name": "Alice", "age": 30}'
d = json.loads(s)
print(d)
# → {'name': 'Alice', 'age': 30}

Python リテラル文字列 → dict(str() の逆)

import ast
s = "{'name': 'Alice', 'age': 30}"
d = ast.literal_eval(s)
print(d)
# → {'name': 'Alice', 'age': 30}

# eval() でも動くが、任意コード実行リスクがあるので literal_eval を使う

使い分けまとめ

用途推奨
API / ファイル保存 / 他言語と連携json.dumps()
デバッグ・ログ出力str() or repr()
整形表示(人間が読む)pprint.pformat() or json.dumps(..., indent=2)
ネスト構造の可視化pprint.pformat()

注意点

  • json.dumps はすべての型に対応していない: datetime, set, bytes, カスタムクラスはそのままだとエラー。default=strcls= オプションで対応
  • str() の出力は他言語で読めない: シングルクォートは標準 JSON ではない
  • 大きな dict は indent なし: ファイルサイズが膨らむ
  • 循環参照: dict が自分自身を含むと json.dumpsstr() も無限再帰でエラー

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 型の確認
  2. strからintへの型変換
  3. 辞書型を文字列に変換する方法