Impresión bonita de un diccionario en Python

Rayven Esplanada 10 octubre 2023
  1. Utilice pprint() para imprimir un diccionario en Python
  2. Utilice json.dumps() para imprimir un diccionario en Python
  3. Usar yaml.dump() para imprimir un diccionario en Python
Impresión bonita de un diccionario en Python

Este tutorial presenta cómo imprimir un diccionario en Python. La impresión bonita significa presentar algo en un formato o estilo más legible.

Utilice pprint() para imprimir un diccionario en Python

pprint es un módulo de Python que proporciona la capacidad de imprimir de forma bonita los tipos de datos de Python para que sean más legibles. Este módulo también soporta la impresión bonita de diccionarios.

Dentro del módulo pprint hay una función con el mismo nombre pprint(), que es la función que se utiliza para la impresión bonita de la cadena u objeto dado.

Primero, declara un array de diccionarios. Después, imprímelo usando la función 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)

Producción :

[{'Age': '23', 'Country': 'USA', 'Name': 'John'},
 {'Age': '44', 'Country': 'Spain', 'Name': 'Jose'},
 {'Age': '29', 'Country': 'UK', 'Name': 'Anne'},
 {'Age': '35', 'Country': 'Japan', 'Name': 'Lee'}]

Para comparar, a continuación se muestra la salida de una sentencia print() normal:

[
    {"Name": "John", "Age": "23", "Country": "USA"},
    {"Name": "Jose", "Age": "44", "Country": "Spain"},
    {"Name": "Anne", "Age": "29", "Country": "UK"},
    {"Name": "Lee", "Age": "35", "Country": "Japan"},
]

La salida de pprint() es definitivamente más legible. Lo que hace es romper cada elemento del diccionario en el array justo después de las comas mientras que también ordena los valores del diccionario por clave.

Si no quiere que sus pares clave-valor estén ordenados por clave, entonces pprint() no es la función que debe utilizar ya que su mecanismo de ordenación está incorporado en la función.

Otra cosa a tener en cuenta es que pprint() no imprimirá bien los objetos anidados, incluyendo los diccionarios anidados. Así que si espera que sus valores estén anidados, entonces esta no es la solución para eso también.

Utilice json.dumps() para imprimir un diccionario en Python

Dentro del módulo json de Python, hay una función llamada dumps(), que convierte un objeto Python en una cadena JSON. Además de la conversión, también formatea el diccionario en un formato JSON bonito, por lo que puede ser una forma viable de imprimir un diccionario convirtiéndolo primero en JSON.

La función dumps() acepta 3 parámetros utilizados para la impresión bonita: el objeto a convertir, un valor booleano sort_keys, que determina si las entradas deben ser ordenadas por clave, y indent, que especifica el número de espacios para la sangría.

Utilizaremos el mismo diccionario de ejemplo que el anterior para esta solución. El valor de sort_keys es False para desactivar la ordenación, y el valor de indent es de 4 espacios.

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))

Resultado:

[
    {
        "Age": "23",
        "Country": "USA",
        "Name": "John"
    },
    {
        "Age": "44",
        "Country": "Spain",
        "Name": "Jose"
    },
    {
        "Age": "29",
        "Country": "UK",
        "Name": "Anne"
    },
    {
        "Age": "35",
        "Country": "Japan",
        "Name": "Lee"
    }
]

Comparado con la salida de la función pprint(), esto es mucho más legible, aunque cuesta más líneas ya que está en un bonito formato JSON.

¿Qué pasa si los valores dados tienen un diccionario anidado dentro de ellos? Editemos un poco el ejemplo y veamos la salida.

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))

Producción :

[
    {
        "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"
        }
    }
]

Evidentemente, los diccionarios anidados JSON bonitos son soportados usando json.dump(), y visualmente se ve limpio y muy legible incluso si está anidado.

Usar yaml.dump() para imprimir un diccionario en Python

Otra forma de imprimir un diccionario es utilizando la función dump() del módulo yaml. Sirve el mismo propósito que la función json.dumps() pero en formato YAML en lugar de JSON.

Primero, instala el módulo YAML usando pip:

pip install pyyaml

o si usas Python 3 y pip3:

pip3 install pyyaml

Vamos a probarlo con el mismo ejemplo anidado utilizado en el ejemplo JSON.

Fíjate en el nuevo parámetro default_flow_style, que determina si el estilo de salida del volcado debe ser inline o block. En este caso, la salida debe ser de estilo bloque ya que queremos que sea legible, así que establece este parámetro a 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))

Producción :

- 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

En resumen, es subjetivo si la función YAML dump() es más legible o no que la función JSON dumps(). Depende de la preferencia personal o del tipo de salida que se requiera. Ambas funciones superan la salida de pprint cuando se trata de estructuras de datos más complejas o de objetos anidados.

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

Artículo relacionado - Python Dictionary

Artículo relacionado - Python Print