python - 如何很好地格式化dict字符串输出

我想知道是否有一种简单的方法来格式化字典输出的字符串,例如:

{
  'planet' : {
    'name' : 'Earth',
    'has' : {
      'plants' : 'yes',
      'animals' : 'yes',
      'cryptonite' : 'no'
    }
  }
}

...,一个简单的 str(dict) 只会给你一个非常难以理解的...

{'planet' : {'has': {'plants': 'yes', 'animals': 'yes', 'cryptonite': 'no'}, 'name': 'Earth'}}

就我对 Python 的了解而言,我将不得不编写大量带有许多特殊情况和 string.replace() 调用的代码,而这个问题本身看起来并不像 1000 行问题。

请建议根据此形状格式化任何 dict 的最简单方法。

最佳答案

根据您对输出的处理方式,一种选择是使用 JSON 进行显示。

import json
x = {'planet' : {'has': {'plants': 'yes', 'animals': 'yes', 'cryptonite': 'no'}, 'name': 'Earth'}}

print json.dumps(x, indent=2)

输出:

{
  "planet": {
    "has": {
      "plants": "yes", 
      "animals": "yes", 
      "cryptonite": "no"
    }, 
    "name": "Earth"
  }
}

这种方法需要注意的是,有些东西不能被 JSON 序列化。如果 dict 包含类或函数等不可序列化的项目,则需要一些额外的代码。

https://stackoverflow.com/questions/3733554/

相关文章:

c# - C# 有自动代码格式化程序吗?

java - 如何从 Java 中的输入文本中删除标点符号?

xml - XML 中的引号。单人还是双人?

javascript - 在 Javascript 中解析 ISO 8601 日期

javascript - 最好的 JavaScript 日期解析器和格式化程序?

c# - DataContractSerializer 创建的 XML 格式

java - Java 中的 String.format() 和十六进制数字

c# - 使用c#的两个小数位

javascript - ".000Z"的 "yyyy-mm-ddT00:00:00.000Z"是什

c++ - 使用 C++ 输出运算符打印前导零?