5

我有一个带有元组键的嵌套字典结构。当我使用 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但我不知道该怎么做。

谢谢。

4

1 回答 1

5

正如您所说,您可以通过子类PrettyPrinter化和覆盖该format方法来实现这一点。请注意,输出不仅是格式化的字符串,还有一些标志。

完成后,您还可以对其进行概括,并将具有不同类型所需格式的字典传递给构造函数:

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}}
于 2017-06-04T17:24:03.633 回答