繁体   English   中英

如何在 Jinja2 中按字母顺序对字典列表进行排序

[英]How to sort a list of dictionaries alphabetically in Jinja2

我的字典示例列表如下所示:

mydata = [{'data': [27, 3, 30, None, None], 'name': 'S1'}, {'data': [57.33, 6.37, 63.7, None, None], 'name': 'A2'}, {'data': [2349.62, 261.09, 2610.71, 0, 0], 'name': 'Total'}]

我想根据键name按字母顺序对整个字典列表进行排序,但必须排除列表的最后一个元素,即名称为Total
名称为Total的字典应该是列表的最后一个元素。

我该如何进行?

我试过类似下面的东西:

<div class="table-data">
    <table class="table-theme">
        <tr>
            <th>Name</th>
            {% for data in mydata |sort(attribute='0.name')  %}
            <th>{{ data["name"] }}</th>
            {% endfor %}
        </tr>
    </table>
</div>

它没有按预期对数据进行排序。
另外如何在最后保留名为Total的字典?

由于过滤器rejectattr ,您可以拒绝名称为Total的元素,然后对结果列表进行排序。
然后, select 只有名称Total的元素,使用筛选器selectattr并将其添加回列表的末尾

鉴于:

{%- set mydata = [{'data': [2349.62, 261.09, 2610.71, 0, 0], 'name': 'Total'},
    {'data': [27, 3, 30, None, None], 'name': 'S1'}, 
    {'data': [57.33, 6.37, 63.7, None, None], 'name': 'A2'},]
-%}

{% for data in 
    mydata | rejectattr('name', '==', 'Total') | sort(attribute='name') | list 
    + mydata | selectattr('name', '==', 'Total') | list 
%}
  {{ data["name"] }}
{% endfor %}

这产生:


  A2 
 
  S1 
 
  Total

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM