นี่คืออีกคำตอบที่ใช้ได้โดยการลบล้างและใช้หุ้น pprint()
ฟังก์ชันภายใน ซึ่งแตกต่างจากของฉันก่อนหน้านี้มันจะจัดการOrderedDict
ภายในภาชนะอื่นเช่นlist
และควรสามารถจัดการอาร์กิวเมนต์คีย์เวิร์ดที่เป็นตัวเลือกที่กำหนดได้ - อย่างไรก็ตามมันไม่มีการควบคุมในระดับเดียวกันกับเอาต์พุตที่อีกอันหนึ่งจ่าย
มันทำงานโดยเปลี่ยนเส้นทางเอาต์พุตของฟังก์ชั่นหุ้นไปยังบัฟเฟอร์ชั่วคราวจากนั้นจึงตัดคำก่อนที่จะส่งไปยังสตรีมเอาต์พุต แม้ว่าผลลัพธ์สุดท้ายที่ผลิตออกมาจะไม่สวยโดดเด่น แต่ก็เหมาะสมและอาจ "ดีพอ" ที่จะใช้เป็นวิธีแก้ปัญหา
อัปเดต 2.0
ทำให้ง่ายขึ้นโดยใช้textwrap
โมดูลไลบรารีมาตรฐานและแก้ไขให้ทำงานได้ทั้งใน Python 2 และ 3
from collections import OrderedDict
try:
from cStringIO import StringIO
except ImportError:
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:
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()
try:
print >> stream, textwrap.fill(' '.join(words), width=width)
except TypeError:
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)])]