pprint 字典在多行
Posted
技术标签:
【中文标题】pprint 字典在多行【英文标题】:pprint dictionary on multiple lines 【发布时间】:2013-12-08 21:35:07 【问题描述】:我正试图获得一本漂亮的字典,但我没有运气:
>>> import pprint
>>> a = 'first': 123, 'second': 456, 'third': 1:1, 2:2
>>> pprint.pprint(a)
'first': 123, 'second': 456, 'third': 1: 1, 2: 2
我希望输出多行,如下所示:
'first': 123,
'second': 456,
'third': 1: 1,
2: 2
pprint
可以这样做吗?如果不是,那么它是哪个模块?我正在使用Python 2.7.3。
【问题讨论】:
这能回答你的问题吗? How to pretty print nested dictionaries? @Georgy 不完全是。该问题中所需的输出与我在这里的输出不同 【参考方案1】:使用width=1
或width=-1
:
In [33]: pprint.pprint(a, width=1)
'first': 123,
'second': 456,
'third': 1: 1,
2: 2
【讨论】:
负宽度有什么作用? @Tim:我刚试了一下,效果很好,但我不知道这是否记录在某个地方。 负宽度没有什么特别的作用。随着代码的进行,它会检查部分输出字符串的长度是否为< width
。任何负宽度仅意味着答案将始终为“否”。宽度为 0 几乎总是(或者可能总是 - 我不在乎考虑反常的情况;-))做同样的事情。
@TimPeters:是的,我查看了源代码。对 width==0 进行了检查(它会引发错误),但似乎可以将 0 视为负值 - 正如你所说的那样,始终回答“否” - 没有害处。跨度>
【参考方案2】:
您可以通过json.dumps(d, indent=4)
将dict转换为json
import json
print(json.dumps(item, indent=4))
"second": 456,
"third":
"1": 1,
"2": 2
,
"first": 123
【讨论】:
比其他解决方案漂亮得多 @ErikAronesty 虽然您应该注意null
和布尔值(真/假)。它们是 JSON 值而不是 python 对象。
简单情况的好的解决方案,但是将 python 值转换为 json 值(正如@RyanChou 指出的那样),它可能不是可取的或不可能的(如datetime
):json.dumps('d': datetime.now())
将崩溃Object of type datetime is not JSON serializable
.
NameError: name 'json' is not defined
- 这是一个需要导入的模块吗?如果是这样,您介意更新您的答案以反映这一点吗?【参考方案3】:
如果您想漂亮地打印环境变量,请使用:
pprint.pprint(dict(os.environ), width=1)
【讨论】:
【参考方案4】:在 Ryan Chou 已经非常有帮助的答案的基础上添加两点:
传递sort_keys
参数,以便更轻松地了解您的字典,尤其是。如果您使用的是 3.6 之前的 Python(其中的字典是无序的)
print(json.dumps(item, indent=4, sort_keys=True))
"""
"first": 123,
"second": 456,
"third":
"1": 1,
"2": 2
"""
dumps()
仅在字典键是原语(字符串、int 等)时才有效
【讨论】:
整洁!sort_keys
是一个很好的论点。不幸的是,正如你所说,并不总是适用:TypeError: Object of type Tag is not JSON serializable
...以上是关于pprint 字典在多行的主要内容,如果未能解决你的问题,请参考以下文章
python 在多行上访问嵌套字典的最佳PEP-8实践是什么?
如何从字典中选择多行(executemany select)