Aqui está outra resposta que funciona substituindo e usando a pprint()função de estoque internamente. Ao contrário do meu mais adiantado que irá lidar OrderedDicté dentro de outro recipiente, como um liste também deve ser capaz de lidar com quaisquer argumentos de palavra-chave opcionais dadas - no entanto, não têm o mesmo grau de controle sobre a saída que o outro oferecidas.
Ele opera redirecionando a saída da função de estoque para um buffer temporário e, em seguida, quebra a palavra antes de enviá-la para o fluxo de saída. Embora a saída final produzida não seja excepcionalmente bonita, é decente e pode ser "boa o suficiente" para ser usada como uma solução alternativa.
Atualização 2.0
Simplificado usando o textwrapmódulo de biblioteca padrão e modificado para funcionar em Python 2 e 3.
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)))]
Saída de amostra:
pprint(d, width=40)
» {'john': 1, 'mary': 3, 'paul': 2}
pprint(od, width=40)
» OrderedDict([('john', 1), ('paul', 2),
('mary', 3)])
pprint(lod, width=40)
» [OrderedDict([('john', 1), ('paul', 2),
('mary', 3)]), OrderedDict([('moe', 1),
('curly', 2), ('larry', 3)]),
OrderedDict([('weapons', 1), ('mass',
2), ('destruction', 3)])]