在 Python 中漂亮列印字典

Rayven Esplanada 2023年1月30日 2021年1月22日
  1. 在 Python 中使用 pprint() 漂亮地列印字典
  2. 在 Python 中使用 json.dumps() 漂亮地列印一個字典
  3. 在 Python 中使用 yaml.dump() 漂亮的列印字典
在 Python 中漂亮列印字典

本教程將介紹如何在 Python 中漂亮地列印字典。漂亮列印的意思是以一種更可讀的格式或風格來呈現一些列印的內容。

在 Python 中使用 pprint() 漂亮地列印字典

pprint 是一個 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 格式,因此這是將字典先轉換為 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() 函式相同,但使用的是 YAML 格式而不是 JSON。

首先,使用 pip 安裝 YAML 模組。

pip install pyyaml

或者如果使用 Python 3 和 pip3 安裝 YAML 模組。

pip3 install pyyaml

讓我們用 JSON 例子中使用的同樣的巢狀例子來嘗試一下。

注意新的引數 default_flow_style,它決定了 dump 的輸出樣式應該是 inline 還是 block。在這種情況下,輸出應該是塊式的,因為我們希望它是可讀的,所以將這個引數設定為 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 的輸出要好。

Rayven Esplanada avatar Rayven Esplanada avatar

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 Print