python - 有什么方法可以正确打印 OrderedDict?

标签 python python-2.7 pretty-print ordereddictionary pprint

我喜欢 Python 中的 pprint 模块。我经常使用它进行测试和调试。我经常使用宽度选项来确保输出完全适合我的终端窗口。

在他们添加新的 ordered dictionary type 之前它一直运行良好在 Python 2.7 中(我非常喜欢的另一个很酷的功能)。如果我尝试漂亮地打印有序字典,它不会很好地显示。不是将每个键值对放在单独的一行中,而是将整个内容显示在一行很长的行中,该行包含很多次并且难以阅读:

>>> from collections import OrderedDict
>>> o = OrderedDict([("aaaaa", 1), ("bbbbbb", 2), ("ccccccc", 3), ("dddddd", 4), ("eeeeee", 5), ("ffffff", 6), ("ggggggg", 7)])
>>> import pprint
>>> pprint.pprint(o)
OrderedDict([('aaaaa', 1), ('bbbbbb', 2), ('ccccccc', 3), ('dddddd', 4), ('eeeeee', 5), ('ffffff', 6), ('ggggggg', 7)])

这里有没有人有办法让它打印得很好,就像旧的无序字典一样?如果我花足够的时间,我可能会想出办法,可能使用 PrettyPrinter.format 方法,但我想知道这里是否有人已经知道解决方案。

更新:我为此提交了错误报告。您可以在 http://bugs.python.org/issue10592 上查看它.

最佳答案

从 Python 3.7 开始,Python 保证字典中的键将保留其插入顺序。 (不过,它们的行为仍然与 OrderedDict 对象不完全相同,因为两个字典 ab 可以被认为是相等的 a == b 即使键的顺序不同,而 OrderedDict 在测试相等性时会检查这一点。)

Python 3.8 或更新版本:

您可以使用 sort_dicts=False 来防止它按字母顺序排序:

>>> example_dict = {'x': 1, 'b': 2, 'm': 3}
>>> import pprint
>>> pprint.pprint(example_dict, sort_dicts=False)
{'x': 1, 'b': 2, 'm': 3}

Python 3.7 或更早版本:

作为临时解决方法,您可以尝试以 JSON 格式转储,而不是使用 pprint

您丢失了一些类型信息,但它看起来不错并且保持顺序。

>>> import json
>>> print(json.dumps(example_dict, indent=4))
{
    "x": 1,
    "b": 2,
    "m": 3
}

关于python - 有什么方法可以正确打印 OrderedDict?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4301069/

相关文章:

python - 如何从 findHomography 获取旋转角度?

javascript - 打开 onclick 事件 python requests 库

python - 将打印的内容添加到字典中

excel - pretty-print Excel 公式?

python - VS Code IDE中的jedi和python语言服务器有什么区别?

python - 将相同的值分配给python中列表中的不同位置

python - 定义@property

encoding - python 2.x中商标符号的长度

node.js - 如何让 Express 输出格式良好的 HTML?

json - 使用 Powershell 将 JSON 保存到带有 pretty-print 的文件