<p>下面是另一个答案,它通过在内部重写和使用stock<code>pprint()</code>函数来工作。与我的<a href="https://stackoverflow.com/a/4302635/355230">earlier one</a>不同,它<em>将</em>处理另一个容器(如<code>list</code>)中的<code>OrderedDict</code>,并且还应该能够处理给定的任何可选关键字参数-但是它对输出的控制程度与另一个容器不同</p>
<p>它将stock函数的输出重定向到一个临时缓冲区,然后word在将其发送到输出流之前对其进行包装。虽然最终产出的产品也不例外地漂亮,但它很不错,可能“足够好”可以作为一种变通方法</p>
<p><strong>更新2.0</strong></p>
<p>通过使用标准库<code>textwrap</code>模块进行简化,并修改为在
Python2和;3. </p>
<pre><code>from collections import OrderedDict
try:
from cStringIO import StringIO
except ImportError: # Python 3
from io import StringIO
from pprint import pprint as pp_pprint
import sys
import textwrap
def pprint(object, **kwrds):
try:
width = kwrds['width']
except KeyError: # unlimited, use stock function
pp_pprint(object, **kwrds)
return
buffer = StringIO()
stream = kwrds.get('stream', sys.stdout)
kwrds.update({'stream': buffer})
pp_pprint(object, **kwrds)
words = buffer.getvalue().split()
buffer.close()
# word wrap output onto multiple lines <= width characters
try:
print >> stream, textwrap.fill(' '.join(words), width=width)
except TypeError: # Python 3
print(textwrap.fill(' '.join(words), width=width), file=stream)
d = dict((('john',1), ('paul',2), ('mary',3)))
od = OrderedDict((('john',1), ('paul',2), ('mary',3)))
lod = [OrderedDict((('john',1), ('paul',2), ('mary',3))),
OrderedDict((('moe',1), ('curly',2), ('larry',3))),
OrderedDict((('weapons',1), ('mass',2), ('destruction',3)))]
</code></pre>
<p>样本输出:</p>
<pre><code>pprint(d, width=40)
</code></pre>
<p>»<code>{'john': 1, 'mary': 3, 'paul': 2}</code></p>
<pre><code>pprint(od, width=40)
</code></pre>
<p>»<code>OrderedDict([('john', 1), ('paul', 2),</code><br/>
<code>('mary', 3)])</code></p>
<pre><code>pprint(lod, width=40)
</code></pre>
<p>»<code>[OrderedDict([('john', 1), ('paul', 2),</code><br/>
<code>('mary', 3)]), OrderedDict([('moe', 1),</code><br/>
<code>('curly', 2), ('larry', 3)]),</code><br/>
<code>OrderedDict([('weapons', 1), ('mass',</code><br/>
<code>2), ('destruction', 3)])]</code><br/></p>