我想知道是否有一种简单的方法来格式化dict-outputs的字符串,例如:
{
'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行问题。 / p>
请根据此形状建议格式化任何字典的最简单方法。
答案 0 :(得分:85)
根据您对输出所做的操作,一个选项是使用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包含类或函数之类的非可序列化项,则需要一些额外的代码。
答案 1 :(得分:36)
使用pprint
import pprint
x = {
'planet' : {
'name' : 'Earth',
'has' : {
'plants' : 'yes',
'animals' : 'yes',
'cryptonite' : 'no'
}
}
}
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(x)
此输出
{ 'planet': { 'has': { 'animals': 'yes',
'cryptonite': 'no',
'plants': 'yes'},
'name': 'Earth'}}
使用pprint格式化,您可以获得所需的结果。
答案 2 :(得分:5)
def format(d, tab=0):
s = ['{\n']
for k,v in d.items():
if isinstance(v, dict):
v = format(v, tab+1)
else:
v = repr(v)
s.append('%s%r: %s,\n' % (' '*tab, k, v))
s.append('%s}' % (' '*tab))
return ''.join(s)
print format({'has': {'plants': 'yes', 'animals': 'yes', 'cryptonite': 'no'}, 'name': 'Earth'}})
输出:
{
'planet': {
'has': {
'plants': 'yes',
'animals': 'yes',
'cryptonite': 'no',
},
'name': 'Earth',
},
}
请注意,我假设所有键都是字符串,或者至少是漂亮的对象