使用groupby过滤器后应用jinja过滤器

时间:2015-01-18 01:36:54

标签: python group-by jinja2

我有一个字典列表,我希望按某个属性分组,然后再用另一个属性求和。对于变量'foo',这将是:

foo | groupby('a') | sum(attribute='b')

这显然不起作用,因为在groupby之后,我有一个元组列表。有没有办法解压缩元组然后重新打包它,这样我可以保持groupby完成的工作,但是可以处理第二个元组值?

1 个答案:

答案 0 :(得分:2)

如果您首先提取组列表,则可以使用map() filter将总和应用于每个组:

foo | groupby('a') | map(attribute='list') | map('sum', attribute='b')

那是因为map()将第一个参数作为另一个过滤器,其余的参数传递给该过滤器,将该过滤器应用于groupby()的每个元素。

这意味着您最终会得到一个总和列表,而不是群组。

您无法将汇总应用于组并保留.grouper属性。为此,唯一的解决方案是使用实际循环:

{% for group in foo | groupby('a') %}
    {{ group.grouper }}: {{ group.list | sum(attribute='b') }}
{% endfor %}

将输出a的每个不同值,后跟冒号以及该组的属性b的总和。