我有一个字典列表,我希望按某个属性分组,然后再用另一个属性求和。对于变量'foo',这将是:
foo | groupby('a') | sum(attribute='b')
这显然不起作用,因为在groupby
之后,我有一个元组列表。有没有办法解压缩元组然后重新打包它,这样我可以保持groupby
完成的工作,但是可以处理第二个元组值?
答案 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
的总和。