使用pprint强制垂直显示

时间:2016-09-18 07:57:10

标签: python dictionary pretty-print

我正在使用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不适合,是否有一些标准库可以帮助我免于编写专用例程?

1 个答案:

答案 0 :(得分: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 "
    }