python - 如何使用 Jinja2 计算 Json 中唯一值的数量?
问题描述
eq:json 喜欢:
{
1: [
{id: 1, name = "sam"},
{id: 1, name = "sam"},
],
2: [
{id: 1, name = "p"},
{id: 2, name = "e"},
],
3: [
{id: 2, name = "alice"}
],
4: [
{id: 3, name = "sam"}
]
}
因此,所需的输出:
1:应该给出值 count=1(名称:值不唯一)
2:应该给出值 count=2(两个名称:字段都是唯一的)
3:应该给出值 count=1(一个条目以及独特的)
很快...
于是写了代码:
{% for row in groups %}
{% set count = namespace(value=0) %}
<tr> {% for items in groups[row[0]] %}
{% if 'name' in items %}
{% set count.value = count.value + 1 %}
{% endif %}
{% endfor %}
<td>{{count.value}}</td>
</tr>
此代码仅计算条目数。不是唯一值计数。
解决方案
一般来说,您可能应该将此类逻辑放入您的 Python 代码中,正如评论者 yedpodtrzitko 所指出的那样。
如果您通过 Flask 使用 jinja2,最方便的方法可能是定义上下文处理器,如此处文档中所述。
在我的示例中,我假设您正在处理 Python 字典,即使您的问题提到了 JSON,这可能表明对 jinja 可以访问的数据存在一些混淆。
{
1: [
{'id': 1, 'name': 'sam'},
{'id': 1, 'name': 'sam'},
],
2: [
{'id': 1, 'name': 'p'},
{'id': 2, 'name': 'e'},
],
3: [
{'id': 2, 'name': 'alice'}
],
4: [
{'id': 3, 'name': 'sam'}
]
}
假设您的示例中的 ID 唯一标识列表中的各个条目,一种有效的方法是使用集合仅包含唯一值的事实,而不是可以包含多个相同整数的列表:
@app.context_processor
def utility_processor():
def count_unique_dicts(input_list):
unique_ids = set([entry['id'] for entry in input_list])
return len(unique_ids)
return dict(count_unique_dicts)
然后,您可以在模板中使用此上下文处理器,如下所示:
{% for row in groups %}
Count: {{count_unique_dicts(row)}}
{% endear %}
推荐阅读
- ios - ios - format the information shared with share sheet
- c++ - 虚拟键到字符的转换取决于语言环境
- android-file - 如何使用 Android 在 Cordova 的共享空间中保存文件?
- javascript - 如何从卡片列表中一次只向上滑动一个卡片盒?
- php - Laravel 响应还包含请求有效负载
- python - 如何将实时数据传输到 ec2 实例?
- azure - 在 Azure 机器上将日期更改为过去的日期
- javascript - 使用文本文件中的数据丰富数组
- postgresql - 嵌套 SQL 查询优化
- prolog - 如何定义此谓词以使其不会永远运行