Python pprintの使い方:複雑なデータ構造を見やすく表示する!


 

Pythonでプログラミングをしていると、辞書(dict)やリスト(list)が入れ子になった、複雑なデータ構造を扱うことがよくあります。これらのデータを単にprint()関数で出力すると、すべてが1行に表示されてしまい、非常に読みにくくなってしまいます。そこで役立つのが、Pythonの標準ライブラリである**pprintモジュール**です。pprint(”pretty print”の略)を使えば、どんなに複雑なデータ構造でも、人間にとって読みやすい形式で整形して出力できます。


 

pprintとは?

 

pprintモジュールは、Pythonのデータ構造を「きれいに(pretty)」表示するために設計されています。特に、ネストされたリストや辞書、オブジェクトの属性など、標準のprint()では見にくいデータを、インデントや改行を適切に使って構造的に出力します。これにより、デバッグ作業やデータの確認が格段に楽になります。


 

pprintの基本的な使い方

 

pprintモジュールを使うには、まずインポートする必要があります。主な関数はpprint()pformat()です。

 

1. pprint()関数で直接出力する

 

pprint.pprint()関数は、引数として渡されたオブジェクトを整形して標準出力(通常はコンソール)に直接表示します。

 

コード例

 

Python
 
import pprint

# シンプルな辞書
data1 = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print("--- 通常のprint ---")
print(data1)
print("\n--- pprint.pprint ---")
pprint.pprint(data1)

# ネストされたデータ構造
data2 = {
    'users': [
        {'id': 1, 'name': 'Bob', 'email': 'bob@example.com', 'roles': ['admin', 'editor']},
        {'id': 2, 'name': 'Carol', 'email': 'carol@example.com', 'roles': ['viewer']},
        {'id': 3, 'name': 'David', 'email': 'david@example.com', 'roles': ['contributor', 'viewer'],
         'settings': {'theme': 'dark', 'notifications': True}}
    ],
    'total_users': 3,
    'status': 'active'
}

print("\n--- 複雑なデータをpprint.pprint ---")
pprint.pprint(data2)

 

出力例(一部)

 

--- 通常のprint ---
{'name': 'Alice', 'age': 30, 'city': 'New York'}

--- pprint.pprint ---
{'age': 30, 'city': 'New York', 'name': 'Alice'}

--- 複雑なデータをpprint.pprint ---
{'status': 'active',
 'total_users': 3,
 'users': [{'email': 'bob@example.com',
             'id': 1,
             'name': 'Bob',
             'roles': ['admin', 'editor']},
           {'email': 'carol@example.com',
             'id': 2,
             'name': 'Carol',
             'roles': ['viewer']},
           {'email': 'david@example.com',
             'id': 3,
             'name': 'David',
             'roles': ['contributor', 'viewer'],
             'settings': {'notifications': True, 'theme': 'dark'}}]}

ご覧の通り、pprint.pprint()は自動的にインデントを付け、要素ごとに改行することで、複雑な辞書やリストが非常に読みやすくなっています。

 

2. pformat()関数で整形された文字列を取得する

 

pprint.pformat()関数は、オブジェクトを整形した文字列として返します。これをファイルに書き込んだり、他の文字列と結合したりする際に便利です。直接出力はしません。

 

コード例

 

Python
 
import pprint

my_data = {
    'fruits': ['apple', 'banana', 'cherry'],
    'vegetables': ['carrot', 'potato', 'onion']
}

# 整形された文字列を取得
formatted_string = pprint.pformat(my_data)

print("--- pformatで整形された文字列 ---")
print(formatted_string)

# この文字列をファイルに書き込むことも可能
# with open('output.txt', 'w') as f:
#     f.write(formatted_string)

 

3. オプション引数で出力をカスタマイズする

 

pprint()関数とpformat()関数には、出力形式を制御するためのいくつかのオプション引数があります。

  • indent: 各レベルのインデントに使うスペースの数を指定します。(デフォルトは1)

  • width: 出力行の最大幅を指定します。この幅を超えると改行されます。(デフォルトは80)

  • depth: 表示するネストの深さを制限します。これを超えると...と表示されます。

  • compact: Trueに設定すると、fitする行の長さを短くしようとします。

 

コード例

 

Python
 
import pprint

data = {
    'a': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'b': {'x': 100, 'y': 200, 'z': 300, 'nested': {'p': 1, 'q': 2}},
    'c': ['alpha', 'beta', 'gamma', 'delta', 'epsilon']
}

print("--- デフォルトのpprint ---")
pprint.pprint(data)

print("\n--- indent=4, width=40 ---")
pprint.pprint(data, indent=4, width=40)

print("\n--- depth=2 ---")
pprint.pprint(data, depth=2)

 

出力例(一部)

 

--- デフォルトのpprint ---
{'a': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
 'b': {'nested': {'p': 1, 'q': 2}, 'x': 100, 'y': 200, 'z': 300},
 'c': ['alpha', 'beta', 'gamma', 'delta', 'epsilon']}

--- indent=4, width=40 ---
{   'a': [   1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'b': {   'nested': {'p': 1, 'q': 2},
             'x': 100,
             'y': 200,
             'z': 300},
    'c': [   'alpha',
             'beta',
             'gamma',
             'delta',
             'epsilon']}

--- depth=2 ---
{'a': [...],
 'b': {'nested': {...}, 'x': 100, 'y': 200, 'z': 300},
 'c': [...]}

 

pprintが特に役立つ場面

 

  • デバッグ: 複雑なデータ構造の中身を素早く確認したいとき。

  • ログ出力: 読みやすい形式でデバッグ情報をログファイルに書き込みたいとき。

  • データ探索: APIレスポンスや設定ファイルなど、構造が複雑なデータを解析するとき。

  • テスト: 期待される出力が複雑なデータ構造である場合の比較。


 

まとめ

 

pprintモジュールは、Pythonで複雑なデータ構造を扱う際の強力な味方です。標準のprint()では得られない、構造的で読みやすい出力を提供することで、デバッグやデータ解析の効率を大幅に向上させます。pprint()pformat()の基本的な使い方をマスターし、さらにindentwidthdepthといったオプションを活用することで、あなたのPython開発はより快適になるでしょう。ぜひ、今日のコードからpprintを使ってみてください!

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座