Categories: Python

【Python】pprintでリストや辞書などのデータを見やすく出力する方法

この記事では、リストや辞書などのデータを見やすく出力するためのpprintモジュールの使い方を解説します。

pprintモジュールのpprint()関数を使うことでデータを見やすくフォーマットしながら出力することができます。

それでは、pprintの使い方を見ていきましょう❗️

pprint関数を使ってみる

pprintモジュールのpprint()関数を使って出力する前に通常のprint()関数を使ってどのように出力されるか確認してみましょう!

data = [{'name': '加藤 学',  'age': 42, 'physique': (186.5, 89.2)}, 
        {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, 
        {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]

print(data)

実行結果

[{'name': '加藤 学', 'age': 42, 'physique': (186.5, 89.2)}, {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]

めちゃくちゃ横長に出力されて見辛いですね。

では次にpprintモジュールのpprint()関数を使って出力してみます。

import pprint

data = [{'name': '加藤 学',  'age': 42, 'physique': (186.5, 89.2)}, 
        {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, 
        {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]

pprint.pprint(data)

実行結果

[{'age': 42, 'name': '加藤 学', 'physique': (186.5, 89.2)},
 {'age': 26, 'name': '佐藤 めぐみ', 'physique': (154.2, 42.8)},
 {'age': 18, 'name': '原田 誠', 'physique': (171.8, 61.4)}]

上記のように改行されて見やすく出力されました。

改行される箇所はwidth引数の値によって変わります(後述)

インデントを指定する

indent引数を指定することでインデントを変更することができます。

import pprint

data = [{'name': '加藤 学',  'age': 42, 'physique': (186.5, 89.2)}, 
        {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, 
        {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]

pprint.pprint(data, indent=4)

実行結果

[   {'age': 42, 'name': '加藤 学', 'physique': (186.5, 89.2)},
    {'age': 26, 'name': '佐藤 めぐみ', 'physique': (154.2, 42.8)},
    {'age': 18, 'name': '原田 誠', 'physique': (171.8, 61.4)}]

改行するまでの文字数を指定する

width引数を指定することで改行されるまでの文字数を指定することができる。デフォルト値は80です。

import pprint

data = [{'name': '加藤 学',  'age': 42, 'physique': (186.5, 89.2)}, 
        {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, 
        {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]

pprint.pprint(data, width=30)

実行結果

[{'age': 42,
  'name': '加藤 学',
  'physique': (186.5, 89.2)},
 {'age': 26,
  'name': '佐藤 めぐみ',
  'physique': (154.2, 42.8)},
 {'age': 18,
  'name': '原田 誠',
  'physique': (171.8, 61.4)}]

出力するデータよりも大きなwidthを指定すると改行されない。

import pprint

data = [{'name': '加藤 学',  'age': 42, 'physique': (186.5, 89.2)}, 
        {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, 
        {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]

pprint.pprint(data, width=180)

実行結果

[{'age': 42, 'name': '加藤 学', 'physique': (186.5, 89.2)}, {'age': 26, 'name': '佐藤 めぐみ', 'physique': (154.2, 42.8)}, {'age': 18, 'name': '原田 誠', 'physique': (171.8, 61.4)}]

改行は以下のような箇所で行われる。

  • リストや辞書の要素ごと
  • 文字列の単語ごと

width引数で指定した文字数以上になった次の箇所で改行が行われる。

また、リストなどはwidth引数に収まらない場合、全ての要素が改行されて出力されますがcompact引数をTrueに指定することで幅に収まるだけ要素が詰め込まれて出力されます。

l = list(range(10))
pprint.pprint(l, width=9)
pprint.pprint(l, width=9, compact=True)

実行結果

[0,
 1,
 2,
 3,
 4,
 5,
 6,
 7,
 8,
 9]
[0, 1, 2,
 3, 4, 5,
 6, 7, 8,
 9]

出力する深さを指定する

depth引数を指定することでネストされた要素をどこまで表示させるかを指定することができます。省略された部分は...で表示されます。

import pprint

data = [{'name': '加藤 学',  'age': 42, 'physique': (186.5, 89.2)}, 
        {'name': '佐藤 めぐみ', 'age': 26, 'physique': (154.2, 42.8)}, 
        {'name': '原田 誠', 'age': 18, 'physique': (171.8, 61.4)}]

pprint.pprint(data, depth=2)

実行結果

[{'age': 42, 'name': '加藤 学', 'physique': (...)},
 {'age': 26, 'name': '佐藤 めぐみ', 'physique': (...)},
 {'age': 18, 'name': '原田 誠', 'physique': (...)}]

辞書を挿入順で出力する

sort_dicts引数をFalseに指定することで辞書を挿入順で出力させることができます。デフォルトはTrueになっていてkeyでソートされた状態で表示されます。

d = {'b': 1, 'a': 2, 'c': 3} 
pprint.pprint(d, sort_dicts=False)
pprint.pprint(d)

実行結果

{'b': 1, 'a': 2, 'c': 3}
{'a': 2, 'b': 1, 'c': 3}
ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago