在 Python 中使用 pprint 打印嵌套字典不一致

Inconsistent printing of nested dict using pprint in Python

我用 pprint 漂亮地打印了一个大的嵌套 dict:

import pprint
import json


with open('config.json', 'r') as fp:
    conf = fp.read()


pprint.pprint(json.loads(conf))



{u'cust1': {u'videotron': {u'temperature': u'3000K',
                           u'image_file': u'bloup.raw',
                           u'light_intensity': u'20',
                           u'size': [1920, 1080],
                           u'patches': [[94, 19, 247, 77],
                                        [227, 77, 293, 232],
                                        [77, 217, 230, 279],
                                        [30, 66, 93, 211]]}},
 u'cust2': {u'Rogers': {u'accuracy': True,
                        u'bleed': True,
                        u'patches': [[192,
                                      126,
                                      10,
                                      80],
                                     [318,
                                      126,
                                      10,
                                      80], ...

第 2 级列表 cust2.Rogers.patches 已展开,而 cust1.videotron.patches 未展开。我希望 而不是 都展开,即打印在同一行上。有人知道怎么做吗?

你可以玩两个参数:widthcompact(最后一个可能对Python2不可用)。

width -- 水平限制 space.

这里是 compact 的描述:

If compact is false (the default) each item of a long sequence will be formatted on a separate line. If compact is true, as many items as will fit within the width will be formatted on each output line.

但据我了解,您无法告诉 pprint 任何有关数据结构以及您希望如何打印特定元素的信息。

PrettyPrinter 控件

pprint 模块中的 PrettyPrinter 接受各种参数来控制输出格式:

  • indent: 为每个递归级别添加的缩进量
  • width:使用宽度参数
  • 限制所需的输出宽度
  • 深度: 可打印的层数
  • compact:当为 true 时,将在每个输出行上格式化适合宽度的尽可能多的项目

JSON备选方案

带有indent参数集的json module itself has its own alternative to pprint using json.dumps

>>> print json.dumps(conf, indent=4)
{
    "cust2": {
        "Rogers": {
            "patches": [
                [
                    192, 
                    126, 
                    10, 
                    80
                ], 
       ...

具体问题

The 2nd level list cust2.Rogers.patches is unfold whereas cust1.videotron.patches is not. I'd like both not to be unfold, i.e. printed on the same line.

以上两种工具都不能让您直接按照指定的方式解决您的问题。要准确获得您想要的内容,您需要编写一些自定义漂亮的打印代码。