41

デフォルトのdictを使用しています。する必要があり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..........

pprintデフォルトの辞書を使用するにはどうすればよいですか?

4

5 に答える 5

44

pprint(dict(defaultdict))以前は回避策として使用していました。

于 2012-10-16T23:38:38.080 に答える
24

私が見つけた最善の解決策は、ちょっとしたハックですが、エレガントなものです (ハックが可能であれば):

class PrettyDefaultDict(collections.defaultdict):
    __repr__ = dict.__repr__

そして、のPrettyDefaultDict代わりにクラスを使用しcollections.defaultdictます。pprint モジュールの動作方法により動作します (少なくとも 2.7 では):

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

このようにして、 pprint を「だまして」、辞書クラスが通常の のように見えるようにしますdict

于 2013-08-22T09:29:59.223 に答える
17

を使用する必要がない場合はpprint、次を使用jsonしてきれいに印刷できdefaultdictます。

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

これは、ネストされた defaultdict に対しても機能します。

于 2016-01-19T18:06:34.453 に答える
4

Jon Clements の回答と同じように、これが一般的な操作である場合は、以下に示すように、defaultdict をサブクラス化して repr メソッドをオーバーライドすることを検討してください。

入力:

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]]}
于 2012-10-17T00:04:29.260 に答える