Подтвердить что ты не робот

Python и default dict, как отпечатать

Я использую default 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 для работы с дефолтом по умолчанию?

4b9b3361

Ответ 1

Я использовал pprint(dict(defaultdict)) раньше в качестве рабочего процесса.

Ответ 2

Лучшее решение, которое я нашел, - это немного взломанный, но элегантный (если взломать когда-либо):

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.

Ответ 3

Если вам не нужно использовать pprint, вы можете использовать json для красивой печати defaultdict:

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

Это также работает для вложенных defaultdicts.

Ответ 4

В том же духе, что и ответ Джона Клемента, если это обычная операция для вас, вы можете подумать о подклассе defaultdict, чтобы переопределить его метод повторения, как показано ниже.

Ввод:

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]]}

Ответ 5

Мне действительно нравится это решение для работы с вложенными defaultdicts. Это немного взломать, но выполняет работу аккуратно, когда pdbing:

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

От: fooobar.com/info/28784/...