HOWTO · Python
Converter dicionário em string em Python
Este tutorial demonstra como converter um dicionário em uma string e vice-versa em Python
Nesta página
Um dicionário pode ser convertido em string para exibição, registro em log ou troca de dados, mas cada finalidade exige um formato diferente. str() fornece a representação do Python, json.dumps() produz texto JSON para intercâmbio, pprint.pformat() gera uma formatação legível e um laço permite definir um formato de exibição. Todos esses resultados são strings, mas nem todos preservam os mesmos tipos ou garantem que seja possível reconstruir o dicionário original.
Escolha a forma certa de converter um dicionário em string
Use str() quando precisar de uma representação rápida voltada ao Python, como em uma mensagem de depuração. Use json.dumps() quando outro sistema esperar JSON e seus valores forem compatíveis com os tipos aceitos por JSON. Escolha pprint.pformat() para facilitar a inspeção de dados Python aninhados. Crie uma string personalizada quando a saída precisar de um formato específico, como name: Alice, score: 9.
Esses formatos de serialização não são intercambiáveis. Uma string personalizada para exibição e o resultado de str() podem ser ambíguos ou inadequados para análise por outro programa. JSON aceita objetos, arrays, strings, números, valores booleanos e nulos; valores exclusivos do Python, como tuplas e conjuntos, precisam ser convertidos ou tratados por outra abordagem. Pickle também não converte em string: sua serialização produz bytes, e carregar dados pickle de uma fonte não confiável pode executar código nocivo.
Use str() para obter uma representação do Python
str(dictionary) é a opção concisa quando basta uma representação legível do Python. Ela inclui as chaves do dicionário e as representações de chaves e valores no estilo Python. A formatação exata foi pensada para Python, não como um contrato de dados entre linguagens; por exemplo, Python usa True e None, enquanto JSON usa true e null.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
details = {"name": "Ada", "active": True}
text = str(details)
print(type(text).__name__)
print(text)
str
{'name': 'Ada', 'active': True}
Evite atribuir o dicionário a uma variável chamada dict, pois isso encobre o tipo interno do Python com o mesmo nome. Lembre-se também de que converter um objeto em texto não torna esse texto reversível por si só.
Serialize um dicionário como JSON com json.dumps()
Para obter uma string padrão de intercâmbio de dados, use json.dumps(). A função correspondente, json.loads(), interpreta o texto JSON e o converte novamente em valores Python. A conversão de ida e volta preserva dados compatíveis com JSON, mas não mantém todos os tipos do Python: tuplas viram arrays e são carregadas como listas, e as chaves do dicionário precisam ser de tipos aceitos por JSON. Por padrão, caracteres não ASCII são escapados; defina ensure_ascii=False para exibi-los diretamente. Use indent para facilitar a leitura do JSON ou sort_keys=True para manter uma ordem estável das chaves, quando isso for útil.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import json
record = {"name": "Ada", "score": 9}
text = json.dumps(record)
restored = json.loads(text)
print(text)
print(restored == record)
{"name": "Ada", "score": 9}
True
O valor retornado por json.dumps() é uma string. Se o dicionário contiver valores que JSON não consegue codificar, defina uma estratégia de conversão deliberada ou escolha um formato adequado a esses dados; não presuma que JSON aceite qualquer objeto Python.
Formate um dicionário para obter uma saída legível com pprint.pformat()
Use pprint.pformat() quando quiser uma string formatada em vez de imprimir diretamente no console. Ela é útil para dados aninhados porque pode distribuir estruturas longas em várias linhas. O resultado continua sendo uma representação para exibição voltada ao Python, não JSON. Com as opções disponíveis, você pode ajustar a largura, a indentação, a profundidade e a compactação; limitar a profundidade abrevia o conteúdo aninhado, então a string formatada talvez não mostre todos os valores.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import pprint
record = {"user": {"name": "Ada", "roles": ["author", "editor"]}}
text = pprint.pformat(record, sort_dicts=False)
print(type(text).__name__)
print(text)
str
{'user': {'name': 'Ada', 'roles': ['author', 'editor']}}
Use a string retornada onde precisar, por exemplo, em uma mensagem de log. Já pprint.pprint() escreve o texto formatado em um fluxo e é útil quando você quer imprimir o resultado em vez de mantê-lo em uma variável.
Crie uma string personalizada com um laço
Um formato personalizado dá controle sobre separadores e rótulos. Uma compreensão com str.join() evita concatenações repetidas de strings e facilita a remoção do delimitador final. Se outro programa for analisar o resultado, decida como tratar valores que possam conter o separador escolhido; um formato simples para exibição não define regras de escape automaticamente.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
scores = {"Ada": 9, "Lin": 8}
text = ", ".join(f"{name}: {score}" for name, score in scores.items())
print(text)
Ada: 9, Lin: 8
Esse formato serve para uma linha destinada à leitura por uma pessoa. Se o resultado precisar ser trocado entre sistemas ou armazenado para análise posterior, use JSON ou defina e implemente um formato com regras explícitas de aspas e escape.
Converta uma string de volta em dicionário
Use json.loads() para interpretar uma string JSON. Ela aceita a sintaxe JSON, não qualquer saída Python produzida por str(). Para uma string com um literal Python sob seu controle, ast.literal_eval() pode interpretar estruturas literais compatíveis, inclusive um dicionário, sem avaliar expressões Python arbitrárias. Ela não é um analisador genérico e não deve ser usada com entradas não confiáveis, muito grandes ou que exijam muitos recursos. Valide o tipo e o conteúdo resultantes conforme as necessidades da sua aplicação.
Execute este exemplo:
O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.
import ast
import json
json_text = '{"name": "Ada", "score": 9}'
python_text = "{'name': 'Ada', 'score': 9}"
print(json.loads(json_text))
print(ast.literal_eval(python_text))
{'name': 'Ada', 'score': 9}
{'name': 'Ada', 'score': 9}
Escolha o analisador correspondente ao formato que produziu a string. Nenhum dos dois consegue recuperar com segurança um dicionário de uma string arbitrária de exibição personalizada, a menos que esse formato tenha um analisador próprio e regras claramente definidas.