我喜欢 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
对象不完全相同,因为两个字典 a
和 b
可以被认为是相等的 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/