使用Python中的pprint在嵌套dict中打印不一致

时间:2017-08-22 17:50:59

标签: python json printing console pprint

我使用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则不展开。我希望展开,即打印在同一行。有谁知道怎么做?

2 个答案:

答案 0 :(得分:1)

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

width - 限制水平空间。

以下是compact的说明:

  

如果compact为false(默认值),则长序列中的每个项目将在单独的行上进行格式化。如果compact为true,则将在每个输出行上格式化适合宽度的项目。

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

答案 1 :(得分:1)

PrettyPrinter控件

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

  • 缩进:为每个递归级别添加的缩进量
  • 宽度:使用宽度参数
  • 约束所需的输出宽度
  • 深度:可以打印的关卡数量
  • 紧凑:当为true时,将在每个输出行上格式化适合宽度的项目

JSON替代

使用json moduleindent参数设置json.dumps本身有自己的pprint替代方法:

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

具体问题

  

第二级列表cust2.Rogers.patches展开,而cust1.videotron.patches则不展开。我希望两者都不要展开,即印在同一条线上。

上述任何一种工具都无法直接解决您指定的问题。要获得您想要的内容,您需要编写一些自定义的漂亮打印代码。