【发布时间】:2016-05-06 17:33:11
【问题描述】:
我有 Django 查询集:
summary = Contracts.objects.all() \
.filter(datestart__gte=time_threshold) \
.values('datestart', 'id_deposits__id_valuta__name') \
.annotate(sum=Sum('suma')) \
.order_by('-id_deposits__id_valuta__name')
我通过以下方式捕获 qs:
for s in summary:
for k, v in CURRENCY.items():
if s['id_deposits__id_valuta__name'] == k:
s['sum'] *= CURRENCY[k]
它会根据需要更新货币总和。它返回字典
{'sum': Decimal('400000.00'), 'datestart': datetime.date(2016, 3, 1), 'id_deposits__id_valuta__name': 'Гривня'}
{'sum': Decimal('2500000.00'), 'datestart': datetime.date(2016, 4, 25), 'id_deposits__id_valuta__name': 'Долар'}
{'sum': Decimal('2500000.00'), 'datestart': datetime.date(2016, 4, 25), 'id_deposits__id_valuta__name': 'Долар'}
现在我需要对字典中“sum”键的值求和,当“datestart”值中的月份相等时。
例如。一些 dicts 有 sum, datestart 键。当 dicts 同月时,我需要有“总和”值的总和:2016-04-03、2016-04-14
那么如何以简约的方式做到这一点?
【问题讨论】:
-
为什么不直接使用
for s in summary: s['sum'] *= CURRENCY.get(s['id_deposits__id_valuta__name'], 1)?你这里有一本字典,使用字典查找。 -
@MartijnPieters,我对单线算法不太聪明,抱歉)谢谢你的想法
-
那么
2016-04-03和2015-04-05应该怎么处理呢?是同一个月(都是 4 月),还是应该以不同的方式划分(2016 年 4 月与 2015 年 4 月)? -
@MartijnPieters 应该以不同的方式存储,
标签: python django dictionary sum