You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jinja中统计字典列表中值“P”的出现次数并添加total字段

解决Jinja2中字典列表统计值出现次数并添加total键的问题

需求说明

有一个字典列表,需要统计每个字典中值为"P"的出现次数,为每个字典添加"total"键,并将统计结果作为该键的值。示例列表如下:

{% set my_list = [
  {'key1': "P",'key2': "P",'key3': "P",'key4': "P"},
  {'key1': "",'key2': "P",'key3': "P",'key4': "P"}, 
  {'key1': "P",'key2': "P",'key3': "",'key4': "P"}
] %}

原代码问题

你编写的代码无法正确累加count,每次返回的都是0,代码如下:

{% for my_dict in my_list %}

  {% set count = 0 %}

  {% for key, value in my_dict.items() %}

    {% if value == 'P' %}

      {% set count = count + 1 %}

    {% endif %}

  {% endfor %}

 {% set _ = emp.update({'total': count}) %}  

{% endfor %}

问题出在两个地方:

  1. Jinja2变量作用域限制:普通的set变量是块级作用域,内层循环中修改count时,实际是创建了一个新的局部变量,不会影响外层的count值,所以外层的count始终是初始的0。
  2. 变量名错误:代码中使用emp.update,但实际应该操作循环中的my_dict。

正确解决方案

方法一:使用Namespace维护可变变量

Jinja2的namespace对象的属性是可变的,可以用来在嵌套循环中维护累加值:

{% set my_list = [
  {'key1': "P",'key2': "P",'key3': "P",'key4': "P"},
  {'key1': "",'key2': "P",'key3': "P",'key4': "P"}, 
  {'key1': "P",'key2': "P",'key3': "",'key4': "P"}
] %}

{% for my_dict in my_list %}
  {% set ns = namespace(count=0) %}
  {% for key, value in my_dict.items() %}
    {% if value == 'P' %}
      {% set ns.count = ns.count + 1 %}
    {% endif %}
  {% endfor %}
  {% set _ = my_dict.update({'total': ns.count}) %}
{% endfor %}

{# 输出结果 #}
{{ my_list }}

方法二:使用过滤器简化统计

利用Jinja2的过滤器组合,直接统计值为"P"的元素数量,代码更简洁:

{% set my_list = [
  {'key1': "P",'key2': "P",'key3': "P",'key4': "P"},
  {'key1': "",'key2': "P",'key3': "P",'key4': "P"}, 
  {'key1': "P",'key2': "P",'key3': "",'key4': "P"}
] %}

{% for my_dict in my_list %}
  {% set p_count = my_dict.values() | selectequalto('P') | list | length %}
  {% set _ = my_dict.update({'total': p_count}) %}
{% endfor %}

{# 输出结果 #}
{{ my_list }}

两种方法最终都会得到你期望的输出:

[
 {'key1': 'P', 'key2': 'P', 'key3': 'P', 'key4': 'P', 'total': 4},
 {'key1': '', 'key2': 'P', 'key3': 'P', 'key4': 'P', 'total': 3},  
 {'key1': 'P', 'key2': 'P', 'key3': '', 'key4': 'P', 'total': 3}
]

内容的提问来源于stack exchange,提问作者Sagar Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:01:19