Python和默认dict,如何pprint

Tam*_*mpa 32 python

我正在使用默认字典.我需要pprint.

然而,当我pprint......这就是它的样子.

defaultdict(<functools.partial object at 0x1f68418>, {u'300:250': defaultdict(<functools.partial object at 0x1f683c0>, {0: defaultdict(<type 'list'>, {u'agid1430864021': {u'status': u'0', u'exclude_regi..........
Run Code Online (Sandbox Code Playgroud)

如何pprint使用默认字典?

Jon*_*nts 38

我之前用过的pprint(dict(defaultdict))是解决方法.

  • 我发现如果对象是deafultdict对象的嵌套层次结构,这个解决方案不会产生预期的效果. (15认同)
  • 对于嵌套的默认值:`pprint({k:dict(v)代表k,v代表dict(group_ids).items()}) (4认同)

Red*_*low 19

我发现的最好的解决方案是一个黑客,但一个优雅的解决方案(如果一个黑客可以):

class PrettyDefaultDict(collections.defaultdict):
    __repr__ = dict.__repr__
Run Code Online (Sandbox Code Playgroud)

然后使用PrettyDefaultDict该类而不是collections.defaultdict.它的工作原理是因为pprint模块的工作方式(至少在2.7上):

r = getattr(typ, "__repr__", None)
if issubclass(typ, dict) and r is dict.__repr__:
    # follows pprint dict formatting
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我们"欺骗"pprint,认为我们的字典类就像正常一样dict.


Mar*_*kus 13

如果您不必使用pprint,您可以使用json漂亮的打印defaultdict:

print(json.dumps(my_default_dict, indent=4))
Run Code Online (Sandbox Code Playgroud)

这也适用于嵌套的默认值.


jar*_*kwg 5

我真的很喜欢这个处理嵌套默认字典的解决方案。这有点像黑客,但在 pdbing 时可以很好地完成工作:

import json
data_as_dict = json.loads(json.dumps(data_as_defaultdict))
print(data_as_dict)
Run Code Online (Sandbox Code Playgroud)

来自:/sf/answers/2261253081/