【问题标题】:Force vertical display with pprint使用 pprint 强制垂直显示
【发布时间】:2017-01-26 02:14:42
【问题描述】:

我使用pprint 在两个字典之间显示diff。有时字典中的值是长字符串,我希望将其视为单行,因此我将 width 设置为某个较大的值。不幸的是,有时这些字典很浅(即,虽然在一般情况下它们可以嵌入列表和字典,但有些只是具有短字符串值的字典),在这种情况下 pprint 将它们“漂亮地打印”在一行上:

>>> pprint.pprint({'a': 'a', 'b': 'b'})
{'a': 'a', 'b': 'b'}

有没有办法强制pprint 始终垂直显示列表和字典?同样width 不是一个选项,因为它的字符串在行内分割(即,在\n 上中断是好的,但在其他地方不行)。

>>> pprint.pprint({'a': 'a ' * 50}, width=20)
{'a': 'a a a a a a '
      'a a a a a a '
      'a a a a a a '
      'a a a a a a '
      'a a a a a a '
      'a a a a a a '
      'a a a a a a '
      'a a a a a a '
      'a a '}

如果pprint 不合适,是否有一些标准库可以让我免于编写专用例程?

【问题讨论】:

  • 您希望的输出究竟是什么?

标签: python dictionary pretty-print


【解决方案1】:

选项:使用json

我发现将字典转换为 JSON 比 pprint 更容易预测。在 此外,您可以选择对键进行排序,这应该可以帮助您 比较

    >>> import json

    >>> d1 = {'a': 'a', 'b': 'b', 'c':'c'}
    >>> print(json.dumps(d1, sort_keys=True, indent=''))
    {
    "a": "a",
    "b": "b",
    "c": "c"
    }
    >>> d2 = {'a': 'a ' * 50, 'b':'b', 'c': 'c ' * 50}
    >>> print(json.dumps(d2, sort_keys=True, indent=''))
    {
    "a": "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a ",
    "b": "b",
    "c": "c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c "
    }

【讨论】:

  • pprint 对键进行排序。不幸的是json 不会在\n 处拆分行,这对于之后依赖diff 是非常必要的。在这方面,比pprint差。
猜你喜欢
  • 2014-09-02
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多