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を使うと便利です。