Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和默认dict,如何pprint_Python - Fatal编程技术网

Python和默认dict,如何pprint

Python和默认dict,如何pprint,python,Python,我正在使用默认dict。我需要pprint 但是,当Ipprint…它看起来就是这样 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

我正在使用默认dict。我需要
pprint

但是,当I
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..........
defaultdict(,{u'300:250]:defaultdict(,{0:defaultdict(,{u'agid1430864021':{u'status':u'0',u'exclude_regi。。。。。。。。。。

<如何> <代码> pPrime/Copy>使用默认的DICT?< /P> < P>我曾使用<代码> PDEN(DITCT(Debug))/代码>作为一个工作。

< P>与Jon Clements的答案相同,如果这是一个常见的操作,你可以考虑子类DeFultDICT重写它的RPR方法,如下所示。 输入:

from collections import defaultdict

class prettyDict(defaultdict):
    def __init__(self, *args, **kwargs):
        defaultdict.__init__(self,*args,**kwargs)

    def __repr__(self):
        return str(dict(self))

foo = prettyDict(list)

foo['bar'].append([1,2,3])
foo['foobar'].append([4,5,6,7,8])

print(foo)
{'foobar': [[4, 5, 6, 7, 8]], 'bar': [[1, 2, 3]]}
输出:

from collections import defaultdict

class prettyDict(defaultdict):
    def __init__(self, *args, **kwargs):
        defaultdict.__init__(self,*args,**kwargs)

    def __repr__(self):
        return str(dict(self))

foo = prettyDict(list)

foo['bar'].append([1,2,3])
foo['foobar'].append([4,5,6,7,8])

print(foo)
{'foobar': [[4, 5, 6, 7, 8]], 'bar': [[1, 2, 3]]}

我找到的最好的解决方案是一点技巧,但要优雅一点(如果有技巧的话):

然后使用
PrettyDefaultDict
类而不是
collections.defaultdict
。它的工作方式取决于pprint模块的工作方式(至少在2.7上):


通过这种方式,我们“欺骗”了pprint,使其认为我们的dictionary类就像一个普通的
dict

我非常喜欢这种处理嵌套的DefaultDict的解决方案。这有点像黑客,但在pdbing时,它能很好地完成这项工作:

import json
data_as_dict = json.loads(json.dumps(data_as_defaultdict))
print(data_as_dict)

From:

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

print(json.dumps(my_default_dict, indent=4))

这也适用于嵌套的DefaultDict。

我发现,如果对象是deafultdict对象的嵌套层次结构,则此解决方案不会产生预期效果。对于嵌套的DefaultDict:
pprint({k:dict(v)表示k,v表示dict(group_id).items()})
@rossoft您实际测试过这一建议吗(
defaultdict.\uuu repr\uuuu=dict.\uu repr\uuu
)在告诉我们我们能做到这一点之前?@Aaron Hall:它在Python 2.7上对我起了作用。如果你有问题,告诉我们是什么问题。@mhsmith我的问题是向rossoft提出的,他一定已经删除了他的消息。但是RedGlow的代码可以使用一个演示。啊,是的,我显然不建议猴子修补defaultdict本身。如果你的键不是字符串,这将我弄乱了你的指纹