在 Python 中漂亮打印字典

Rayven Esplanada 2023年10月10日
  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