Đây là một câu trả lời khác hoạt động bằng cách ghi đè và sử dụng pprint()
hàm cổ phiếu trong nội bộ. Không giống như cái trước đó của tôi, nó sẽ xử lý OrderedDict
bên trong một vùng chứa khác chẳng hạn như a list
và cũng có thể xử lý bất kỳ đối số từ khóa tùy chọn nào được đưa ra - tuy nhiên nó không có cùng mức độ kiểm soát đối với đầu ra mà cái kia đã có.
Nó hoạt động bằng cách chuyển hướng đầu ra của hàm chứng khoán thành một bộ đệm tạm thời và sau đó kết thúc từ đó trước khi gửi nó đến luồng đầu ra. Mặc dù kết quả cuối cùng được tạo ra không quá đẹp nhưng nó khá ổn và có thể "đủ tốt" để sử dụng như một giải pháp thay thế.
Cập nhật 2.0
Được đơn giản hóa bằng cách sử dụng textwrap
mô-đun thư viện tiêu chuẩn và được sửa đổi để hoạt động trong cả 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)))]
Đầu ra mẫu:
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)])]