Python: defaultdict с заданной структурой

collections.defaultdict

defaultdict призван избавить ваш код от ужасных многострочных/длинных конструкций из if-else, has_key/in, обладающих, к тому же, дерьмовой производительностью, растущей из повторяющегося несколько раз поиска по словарю.

Тем не менее, если значение по-умолчанию должно обладать собственной структурой из контейнеров, то придется писать функцию, которая вернет нужную структуру, что все равно займет несколько строчек, да еще и визуально потеряется целостность, так как данные одного словаря инициализируются в двух местах…

В общем, для ценителей компактности, консистентости и извращений нестандартных решений:

from copy import deepcopy
from functools import partial
from collections import defaultdict

data = defaultdict(partial(deepcopy, 
           {'flags': set(), 'settings': {}, 'name': None}
                   ))
Запись опубликована в рубрике На заметку с метками , . Добавьте в закладки постоянную ссылку.

Один комментарий: Python: defaultdict с заданной структурой

  1. Konstantin говорит:

    Можно проще
    data = defaultdict(lambda: {‘flags’: set([]), ‘name’: None, ‘settings’: {}})

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *