【问题标题】:jinja2: sort dict by defined key order?jinja2:按定义的键顺序对字典进行排序?
【发布时间】:2015-08-09 21:51:39
【问题描述】:

假设我想显示一些这样的数据:

• b is foo
• a is bar
• c is baz

...但我的数据集看起来像这样(或任何其他顺序,因为 JSON 不在乎):

{
"a": "bar",
"b": "foo",
"c": "baz"
}

我如何告诉 Jinja2 总是以b a c 顺序显示我的数据?如果我不确定元素 c 是否会一直存在怎么办?

我以为会是这样,但无济于事:

<ul>
{% for key, value in my_dict.items()|dictsort(by=['b', 'a']) %}
    <li>{{ key }} is {{ value }}</li>
{% endfor %}
</ul>

【问题讨论】:

    标签: python html django jinja2


    【解决方案1】:

    Python dicts 没有排序,也许你可以使用集合中的OrderedDict

    import collections
    
    my_dict = {
        "a": "bar",
        "b": "foo",
        "c": "baz"
    }
    my_ord_dict = collections.OrderedDict(my_dict)
    

    【讨论】:

    • 我考虑过这一点,但不幸的是,我必须处理一个非常死板且不可预测的 API。
    【解决方案2】:

    你可以遍历一个硬编码的键列表:

    <ul>
    {% for key in ('b', 'a', 'c') %}
        {% if key in my_dict %}
        <li>{{ key }} is {{ my_dict[key] }}</li>
        {% endif %}
    {% endfor %}
    </ul>
    

    不存在的密钥由if 测试处理。

    【讨论】:

    • 我认为这已经到了。问题是,也许我应该修改我的问题,很可能存在我不能忽略的元素d e f g ...。我可以从字典中“弹出”ab,然后回退到硬编码循环未涵盖的其他人的默认表示吗?
    • @niteshade:您可以在循环中跳过 ab 并明确列出它们,也许?或者您可以为键 (list(my_dict)) 创建一个列表并对其进行操作,等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2018-08-13
    • 2014-02-08
    • 2021-12-20
    • 2014-04-11
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多