Pretty Imprimir um Dicionário Bonito em Python

Rayven Esplanada 10 outubro 2023
  1. Utilizar pprint() para imprimir um dicionário em Python
  2. Utilize json.dumps() para imprimir bonito um dicionário em Python
  3. Utilize yaml.dump() para imprimir um dicionário em Python
Pretty Imprimir um Dicionário Bonito em Python

Este tutorial irá introduzir como imprimir um dicionário bonito em Python. A impressão bonita significa apresentar algo num formato ou estilo mais legível.

Utilizar pprint() para imprimir um dicionário em Python

pprint é um módulo Python que fornece a capacidade de imprimir tipos de dados Python de forma bonita para ser mais legível. Este módulo também suporta o dicionário de bonita impressão.

Dentro do módulo pprint existe uma função com o mesmo nome pprint(), que é a função utilizada para imprimir bonito a string ou objecto dado.

Em primeiro lugar, declarar um array de dicionários. Depois, imprimi-la bonita utilizando a função 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)

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'}]

Para comparar, abaixo está a saída de uma declaração normal 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"},
]

A saída pprint() é definitivamente mais legível. O que faz é quebrar cada elemento do dicionário no array logo a seguir às vírgulas, ordenando também os valores do dicionário por chave.

Se não quiser os seus pares de valores de chave ordenados por chave, então pprint() não é a função a utilizar, uma vez que o seu mecanismo de ordenação está incorporado na função.

Outra coisa a notar é que pprint() não irá imprimir objectos bem aninhados, incluindo dicionários aninhados. Portanto, se espera que os seus valores sejam aninhados, então esta não é também a solução para isso.

Utilize json.dumps() para imprimir bonito um dicionário em Python

Dentro do módulo Python json, existe uma função chamada dumps(), que converte um objecto Python numa string JSON. Para além da conversão, também formata o dicionário num bonito formato JSON, pelo que esta pode ser uma forma viável de imprimir um dicionário bonito, convertendo-o primeiro em JSON.

A função dumps() aceita 3 parâmetros utilizados para impressão bonita: o objecto para conversão, um valor booleano sort_keys, que determina se as entradas devem ser ordenadas por chave, e indent, que especifica o número de espaços para indentação.

Utilizaremos o mesmo dicionário de exemplo acima para esta solução. As sort_keys estão definidas para False para desactivar a ordenação, e indent está definido para espaços de 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))

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

Em comparação com a saída da função pprint(), isto é muito mais legível, embora custe mais linhas, uma vez que está em formato JSON bonito.

E se os valores dados tiverem um dicionário aninhado dentro deles? Vamos editar um pouco o exemplo e dar uma vista de olhos à saída.

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

Resultado:

[
    {
        "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, os lindos dicionários aninhados JSON são suportados utilizando json.dump(), e visualmente parece limpo e muito legível, mesmo que esteja aninhado.

Utilize yaml.dump() para imprimir um dicionário em Python

Outra forma de imprimir um dicionário bonito é utilizando a função dump() do módulo yaml. Serve o mesmo propósito que a função json.dumps() mas em formato YAML em vez de JSON.

Primeiro, instalar o módulo YAML utilizando a função pip:

pip install pyyaml

ou se utilizar Python 3 e pip3:

pip3 install pyyaml

Vamos experimentá-lo com o mesmo exemplo aninhado utilizado no exemplo JSON.

Tomar nota do novo parâmetro default_flow_style, que determina se o estilo de saída do despejo deve ser inline ou block. Neste caso, a saída deve ser no estilo bloco, uma vez que queremos que seja legível, por isso, defina este parâmetro para 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))

Resultado:

- 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

Em resumo, é subjectivo se a função YAML dump() é ou não mais legível do que a função JSON dumps(). Depende da preferência pessoal ou do tipo de saída que é necessária. Ambas as funções batem a saída de pprint quando se trata de estruturas de dados mais complexas ou de objectos aninhados.

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

Artigo relacionado - Python Dictionary

Artigo relacionado - Python Print