我有Django queryset:
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]
它会根据需要更新货币总额。它返回dicts
{'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': 'Долар'}
现在我需要求dicts中“sum”键的值,当“datestart”值中的月份相等时。你知道吗
一些dict有sum,datestart键。当dicts的月份是2016-04-03、2016-04-14时,我需要求“sum”值的和
那么如何以极简主义的方式做到这一点呢?你知道吗
使用字典跟踪每月的总和;您可以在此处使用
defaultdict
来管理初始值:我已经删除了您在
CURRENCY.items()
上的循环;您可以使用dict.get()
来获取值;如果键不在字典中,则使用1
。你知道吗请注意,我将您的总和分组在
(year, month)
元组上,假设您希望将不同年份的月份作为单独的总和处理。你知道吗您可以将每个字典转换为^{} ,其中month是键,value是
s['sum']
,然后将它们相加:请注意,如果需要区分月份和年份,请改用
{(x['datestart'].month, x['datestart'].year): x['sum']}
。你知道吗相关问题 更多 >
编程相关推荐