Python: pprintでリストや辞書を見やすく出力する

Pythonでリストやディクショナリ(辞書)の内容を出力するとき、 print()を使うと1行で出力されます。 データの内容が多い場合は1行出力だと見にくいですよね。 ループで回して表示してもいいのですが、 pprint()関数で表示するという選択肢もあります。

pprintという標準ライブラリ(標準モジュール)があって、 pprintモジュールにpprint関数があります。
pprint関数はリストや辞書を自動で見やすく出力してくれるので、 要素数が多いリストや辞書を出力する時に使うと便利です。

pprint --- データ出力の整然化 — Python ドキュメント

次のような3つの要素(辞書)があるリストを出力してみます。

li = [{"id": 1, "name": "田中", "age": 20},
	{"id": 2, "name": "山田", "age": 30},
	{"id": 3, "name": "佐藤", "age": 40}]

このリストをprint()で表示すると次のように1行で表示されます。

[{'id': 1, 'name': '田中', 'age': 20}, {'id': 2, 'name': '山田', 'age': 30}, {'id': 3, 'name': '佐藤', 'age': 40}]

次はpprint()で表示してみます。

import pprint

li = [{"id": 1, "name": "田中", "age": 20},
	{"id": 2, "name": "山田", "age": 30},
	{"id": 3, "name": "佐藤", "age": 40}]

pprint.pprint(li)

pprintを使うと下のように1つの要素ごとに表示され、 見やすくなっています。

実行結果
[{'age': 20, 'id': 1, 'name': '田中'},
 {'age': 30, 'id': 2, 'name': '山田'},
 {'age': 40, 'id': 3, 'name': '佐藤'}]

引数: withで出力幅を調整する

pprint()を実行したときに、どれくらいの幅で出力するかは自分で指定できます。 ただし正確にこの文字数というわけではなく、 指定した出力幅を基に後はpprint側が自動で調整するので結構あいまいです。

デフォルトの出力幅は80となっていて、 40を指定する場合は

pprint(オブジェクト, width=40)

のように「width」で指定します。

サンプルとして、次のような短い内容のリストがあるとします。

li = [1000, 2301, 1345, 3094, 1983, 3420, 4039]

この場合、pprintで出力しても元々短いので1行で出力されます。

import pprint

li = [1000, 2301, 1345, 3094, 1983, 3420, 4039]

pprint.pprint(li)
実行結果
[1000, 2301, 1345, 3094, 1983, 3420, 4039]

これを要素ごとに1行ずつ出力したければ、 「width=20」や「width=40」などを指定すると 1要素1行で出力されます。

import pprint

li = [1000, 2301, 1345, 3094, 1983, 3420, 4039]

pprint.pprint(li, width=40)
実行結果
[1000,
 2301,
 1345,
 3094,
 1983,
 3420,
 4039]

引数: compact=Trueで複数の要素を表示する

さらに、1つの要素だけではなく複数の要素を表示したい場合は 「compact=True」を指定して、widthの値を適宜調整します。

pprint.pprint(li, width=15, compact=True)
実行結果
[1000, 2301,
 1345, 3094,
 1983, 3420,
 4039]

3要素にもなります。

pprint.pprint(li, width=20, compact=True)
実行結果
[1000, 2301, 1345,
 3094, 1983, 3420,
 4039]

このようにcompact=Trueを指定して、widthの値を調整することで、 出力幅をある程度自分でコントロールできます。

リスト・辞書・タプルなどのコレクションで、 データ内容が多い場合はpprintを使うと便利です。

Python