Berikut jawaban lain yang bekerja dengan mengesampingkan dan menggunakan pprint()
fungsi stok secara internal. Tidak seperti yang saya sebelumnya, ia akan menangani OrderedDict
di dalam wadah lain seperti a list
dan juga harus dapat menangani setiap argumen kata kunci opsional yang diberikan - namun itu tidak memiliki tingkat kontrol yang sama atas keluaran yang diberikan yang lain.
Ini beroperasi dengan mengarahkan output fungsi stok ke buffer sementara dan kemudian kata membungkusnya sebelum mengirimnya ke aliran output. Meskipun hasil akhir yang dihasilkan tidak luar biasa cantik, ini layak dan mungkin "cukup baik" untuk digunakan sebagai solusi.
Perbarui 2.0
Disederhanakan dengan menggunakan textwrap
modul pustaka standar , dan dimodifikasi untuk bekerja dengan 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)))]
Output sampel:
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)])]