具有自定义浮点格式的 pprint
pprint with custom float formats
我有一个带有元组键的嵌套字典结构。这是我使用 pprint 漂亮地打印字典时条目的样子:
...
('A', 'B'): {'C': 0.14285714285714285,
'D': 0.14285714285714285,
'E': 0.14285714285714285,
'F': 0.14285714285714285,
'G': 0.14285714285714285,
'H': 0.14285714285714285,
'I': 0.14285714285714285},
...
它非常漂亮,但我想通过从浮点数中减少一些额外的数字来进一步自定义它。我在想可以通过子类化 pprint.PrettyPrint
来实现,但我不知道该怎么做。
谢谢。
如您所说,您可以通过继承 PrettyPrinter
并覆盖 format
方法来实现。注意输出的不仅仅是格式化后的字符串,还有一些flags。
一旦你做到了,你也可以概括这一点并将具有不同类型所需格式的字典传递给构造函数:
class FormatPrinter(pprint.PrettyPrinter):
def __init__(self, formats):
super(FormatPrinter, self).__init__()
self.formats = formats
def format(self, obj, ctx, maxlvl, lvl):
if type(obj) in self.formats:
return self.formats[type(obj)] % obj, 1, 0
return pprint.PrettyPrinter.format(self, obj, ctx, maxlvl, lvl)
示例:
>>> d = {('A', 'B'): {'C': 0.14285714285714285,
... 'D': 0.14285714285714285,
... 'E': 0.14285714285714285},
... 'C': 255}
...
>>> FormatPrinter({float: "%.2f", int: "%06X"}).pprint(d)
{'C': 0000FF,
('A', 'B'): {'C': 0.14,
'D': 0.14,
'E': 0.14}}
我有一个带有元组键的嵌套字典结构。这是我使用 pprint 漂亮地打印字典时条目的样子:
...
('A', 'B'): {'C': 0.14285714285714285,
'D': 0.14285714285714285,
'E': 0.14285714285714285,
'F': 0.14285714285714285,
'G': 0.14285714285714285,
'H': 0.14285714285714285,
'I': 0.14285714285714285},
...
它非常漂亮,但我想通过从浮点数中减少一些额外的数字来进一步自定义它。我在想可以通过子类化 pprint.PrettyPrint
来实现,但我不知道该怎么做。
谢谢。
如您所说,您可以通过继承 PrettyPrinter
并覆盖 format
方法来实现。注意输出的不仅仅是格式化后的字符串,还有一些flags。
一旦你做到了,你也可以概括这一点并将具有不同类型所需格式的字典传递给构造函数:
class FormatPrinter(pprint.PrettyPrinter):
def __init__(self, formats):
super(FormatPrinter, self).__init__()
self.formats = formats
def format(self, obj, ctx, maxlvl, lvl):
if type(obj) in self.formats:
return self.formats[type(obj)] % obj, 1, 0
return pprint.PrettyPrinter.format(self, obj, ctx, maxlvl, lvl)
示例:
>>> d = {('A', 'B'): {'C': 0.14285714285714285,
... 'D': 0.14285714285714285,
... 'E': 0.14285714285714285},
... 'C': 255}
...
>>> FormatPrinter({float: "%.2f", int: "%06X"}).pprint(d)
{'C': 0000FF,
('A', 'B'): {'C': 0.14,
'D': 0.14,
'E': 0.14}}