【发布时间】:2011-05-17 02:37:40
【问题描述】:
我喜欢 Python 中的 pprint 模块。我经常使用它进行测试和调试。我经常使用宽度选项来确保输出完全适合我的终端窗口。
在他们在 Python 2.7 中添加新的 ordered dictionary type 之前它一直运行良好(我非常喜欢的另一个很酷的功能)。如果我尝试漂亮地打印有序字典,它不会很好地显示。不是将每个键值对放在自己的行上,而是将整个内容显示在一行很长的行中,该行包含很多次并且难以阅读:
>>> 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看到它。
【问题讨论】:
-
建议在bugs.python.org/issue7434添加关于有序字典的评论
-
此问题现已在较新版本的 Python 3 中得到修复。
pprint将更好地处理OrderedDict对象。 -
似乎很多人将这个问题误解为关于
dict对象(在较新版本的 Python 中保留插入顺序),而不是关于OrderedDict对象。我已经修改了标题以使其更清晰。 -
如果您不希望
pprint对dict对象中的键顺序进行排序,请参阅此问题:stackoverflow.com/q/25683088/247696 -
我想要的是字符串,而不是打印。 pprint 搞砸了 f 弦,所以对我来说没用。我直接要字符串。
标签: python python-2.7 pretty-print ordereddictionary pprint