Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
data = {}
data.setdefault('departments', {}).setdefault(sale.user.department.pk, {}).setdefault('users', {}).setdefault('sale.user.pk', {}).setdefault('rows', {}).setdefault(sale.pk, {}) = {...}data = ElasticDict()
data.departments[sale.user.department.pk].users[sale.user.pk].rows[sale.pk] = {...}from collections import defaultdict
data = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(dict)))))
data['departments'][sale.user.department.pk]['users']['sale.user.pk']['rows'][sale.pk] = {...}from collections import defaultdict
recdict = lambda: defaultdict(recdict)
data = recdict()
data["qwe"]["asd"] = 123from collections import defaultdict
class DotDict(defaultdict):
def __getattr__(self, attr):
return self.__getitem__(attr)
def __setattr__(self, attr, val):
return self.__setitem__(attr, val)
def ElasticDict():
return DotDict(ElasticDict)
data = ElasticDict()
data.divisions.sales.persons[123].name = 'Alex'
print data.divisions.sales.persons[123].nameПроверка словарей на наличие ключей или использование setdefatult(key, {}) превращает код в нечитабельную кашу.
from elasticdict import ElasticDict
data = ElasticDict()
for sale in Sale.objects.filter(...).prefetch_related(...):
data.departments[sale.user.department.pk].users[sale.user.pk].rows[sale.pk] = {
'base_income': sale.amount,
'bonus': sale.calc_bonus()
}data = {'departaments': {}}
for sale in Sale.objects.filter(...).prefetch_related(...):
departament = data['deparaments'].setdefault(sale.user.department.pk, {'users': {}})
user = departament['users'].setdefault(sale.user.pk, {'rows': {}})
user['rows'][sale.pk] = {
'base_income': sale.amount,
'bonus': sale.calc_bonus()
}
Как я переизобрел словари в Python