【问题标题】:pprint dictionary on multiple linespprint 字典在多行
【发布时间】: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

【问题讨论】:

标签: python python-2.7 dictionary pprint


【解决方案1】:

使用width=1width=-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...
    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多