Python でプリティプリント辞書
-
Python で辞書をプリティプリントするには
pprint()
を使用する -
Python で辞書をプリティプリントするには
json.dumps()
を使用する -
Python で辞書をきれいに出力するには
yaml.dump()
を使用する
このチュートリアルでは、Python で辞書をプリティ出力する方法を紹介します。プリティプリントとは、何かをより読みやすい形式やスタイルで表示することを意味します。
Python で辞書をプリティプリントするには pprint()
を使用する
pprint
は、Python のデータ型をより読みやすくするために、Python のデータ型をきれいに出力する機能を提供する Python モジュールです。このモジュールはプリティプリント辞書もサポートしています。
pprint
モジュール内には同じ名前の pprint()
という関数があり、これは与えられた文字列やオブジェクトをプリティプリントするために使われる関数です。
まず、辞書の配列を宣言します。その後、関数 pprint.pprint()
を用いてプリティプリントします。
import pprint
dct_arr = [
{"Name": "John", "Age": "23", "Country": "USA"},
{"Name": "Jose", "Age": "44", "Country": "Spain"},
{"Name": "Anne", "Age": "29", "Country": "UK"},
{"Name": "Lee", "Age": "35", "Country": "Japan"},
]
pprint.pprint(dct_arr)
出力:
[{'Age': '23', 'Country': 'USA', 'Name': 'John'},
{'Age': '44', 'Country': 'Spain', 'Name': 'Jose'},
{'Age': '29', 'Country': 'UK', 'Name': 'Anne'},
{'Age': '35', 'Country': 'Japan', 'Name': 'Lee'}]
比較のために、以下は通常の print()
文の出力です。
[
{"Name": "John", "Age": "23", "Country": "USA"},
{"Name": "Jose", "Age": "44", "Country": "Spain"},
{"Name": "Anne", "Age": "29", "Country": "UK"},
{"Name": "Lee", "Age": "35", "Country": "Japan"},
]
pprint()
の出力の方が断然読みやすいです。これが何をするかというと、配列の各辞書要素をカンマの直後で区切ると同時に、辞書の値をキーでソートします。
キーと値のペアをキーでソートしたくないのであれば、pprint()
は使うべき関数ではありません。
もう一つ注意すべきことは、pprint()
は入れ子になった辞書を含めて、入れ子になったオブジェクトをきれいには表示しないということです。ですから、値が入れ子になっていることを期待しているのであれば、これはそのための解決策ではありません。
Python で辞書をプリティプリントするには json.dumps()
を使用する
Python の json
モジュール内には、dumps()
という関数があり、Python オブジェクトを JSON 文字列に変換します。変換の他にも、辞書をきれいな JSON フォーマットにフォーマットしてくれます。
dumps()
関数は、プリティプリントに使われる 3つのパラメータを受け付けます。変換対象のオブジェクト、キーでソートするかどうかを決めるブール値 sort_keys
、インデントのためのスペース数を指定する indent
です。
この解決策には、上記と同じ辞書の例を使用します。sort_keys
はソートを無効にするために False
を設定し、indent
はスペースを 4
に設定します。
import json
dct_arr = [
{"Name": "John", "Age": "23", "Country": "USA"},
{"Name": "Jose", "Age": "44", "Country": "Spain"},
{"Name": "Anne", "Age": "29", "Country": "UK"},
{"Name": "Lee", "Age": "35", "Country": "Japan"},
]
print(json.dumps(dct_arr, sort_keys=False, indent=4))
出力:
[
{
"Age": "23",
"Country": "USA",
"Name": "John"
},
{
"Age": "44",
"Country": "Spain",
"Name": "Jose"
},
{
"Age": "29",
"Country": "UK",
"Name": "Anne"
},
{
"Age": "35",
"Country": "Japan",
"Name": "Lee"
}
]
関数 pprint()
の出力に比べて、これは非常に読みやすくなっていますが、JSON 形式なので行数は多くなります。
与えられた値の中に入れ子になった辞書がある場合はどうでしょうか?例を少し編集して、出力を見てみましょう。
import json
dct_arr = [
{"Name": "John", "Age": "23", "Residence": {"Country": "USA", "City": "New York"}},
{"Name": "Jose", "Age": "44", "Residence": {"Country": "Spain", "City": "Madrid"}},
{"Name": "Anne", "Age": "29", "Residence": {"Country": "UK", "City": "England"}},
{"Name": "Lee", "Age": "35", "Residence": {"Country": "Japan", "City": "Osaka"}},
]
print(json.dumps(dct_arr, sort_keys=False, indent=4))
出力:
[
{
"Name": "John",
"Age": "23",
"Residence": {
"Country": "USA",
"City": "New York"
}
},
{
"Name": "Jose",
"Age": "44",
"Residence": {
"Country": "Spain",
"City": "Madrid"
}
},
{
"Name": "Anne",
"Age": "29",
"Residence": {
"Country": "UK",
"City": "England"
}
},
{
"Name": "Lee",
"Age": "35",
"Residence": {
"Country": "Japan",
"City": "Osaka"
}
}
]
json.dump()
を使用すると、きれいな JSON のネストされた辞書がサポートされていることがわかります。
Python で辞書をきれいに出力するには yaml.dump()
を使用する
辞書をきれいに表示するもう一つの方法は、yaml
モジュールの dump()
関数を使用することです。これは json.dumps()
関数と同じ目的を果たしますが、JSON ではなく YAML 形式です。
まず、pip
を使って YAML モジュールをインストールします。
pip install pyyaml
または、Python 3 と pip3
を使っている場合は pip3
をインストールしてください。
pip3 install pyyaml
JSON の例で使ったのと同じネストした例で試してみましょう。
ダンプの出力スタイルを inline
にするか block
にするかを決定する新しいパラメータ default_flow_style
に注意してください。この場合、出力は読み取り可能にする必要があるため、ブロックスタイルにする必要があるため、このパラメーターを False
に設定します。
import yaml
dct_arr = [
{"Name": "John", "Age": "23", "Residence": {"Country": "USA", "City": "New York"}},
{"Name": "Jose", "Age": "44", "Residence": {"Country": "Spain", "City": "Madrid"}},
{"Name": "Anne", "Age": "29", "Residence": {"Country": "UK", "City": "England"}},
{"Name": "Lee", "Age": "35", "Residence": {"Country": "Japan", "City": "Osaka"}},
]
print(yaml.dump(dct_arr, sort_keys=False, default_flow_style=False))
出力:
- Name: John
Age: '23'
Residence:
Country: USA
City: New York
- Name: Jose
Age: '44'
Residence:
Country: Spain
City: Madrid
- Name: Anne
Age: '29'
Residence:
Country: UK
City: England
- Name: Lee
Age: '35'
Residence:
Country: Japan
City: Osaka
要約すると、YAML の dump()
関数が JSON の dumps()
関数よりも読みやすいかどうかは主観的なものです。個人の好みやどのような出力が必要かによります。どちらの関数も、より複雑なデータ構造や入れ子になったオブジェクトに関しては pprint
の出力に勝るものがあります。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn関連記事 - Python Dictionary
- Python で辞書をリストに変換する
- Python でディレクトリのすべてのファイルを取得する方法
- Python 辞書で最大値を求める
- Python 辞書を値でソートする方法
- Python 2 および 3 で 2つの辞書をマージする方法
- Python 辞書から要素を削除する方法