Вот еще один ответ, который работает путем переопределения и внутреннего использования функции pprint()
. В отличие от моего более раннего он будет обрабатывать OrderedDict
внутри другого контейнера, такого как list
, и также должен иметь возможность обрабатывать любые необязательные аргументы ключевого слова, однако это не делает иметь ту же степень контроля над выходом, что и другой.
Он работает, перенаправляя вывод функции stock во временный буфер, а затем переносит слово перед отправкой в поток вывода. Хотя конечный результат не очень хорош, он приличный и может быть «достаточно хорошим» для использования в качестве обходного пути.
Обновление 2.0
Упрощается с помощью модуля стандартной библиотеки textwrap
и модифицируется для работы в
оба Python 2 и 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)))]
Пример вывода:
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)])]