1

我曾经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], ...

第二级列表cust2.Rogers.patches是展开而cust1.videotron.patches不是。我希望两者都不要展开,即打印在同一行。有谁知道怎么做?

4

2 回答 2

1

您可以使用两个参数:widthcompact(最后一个可能不适用于 Python 2)。

width-- 限制水平空间。

这里是描述compact

如果 compact 为 false(默认值),则长序列的每个项目将被格式化为单独的行。如果 compact 为真,则在每个输出行上都会格式化宽度范围内的尽可能多的项目。

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

于 2017-08-22T17:59:48.083 回答
1

PrettyPrinter 控件

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

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

JSON替代品

json 模块本身使用带有参数集的json.dumps来替代 pprint:indent

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

具体问题

第二级列表 cust2.Rogers.patches 是展开的,而 cust1.videotron.patches 不是。我希望两者都不要展开,即打印在同一行。

上述工具都不能让您按照指定的方式直接解决您的问题。为了得到你想要的,你需要编写一些自定义的漂亮打印代码。

于 2017-08-26T17:04:49.010 回答