Python jinja2:按定义的键顺序对dict排序?

Python jinja2:按定义的键顺序对dict排序?,python,html,django,jinja2,Python,Html,Django,Jinja2,假设我想显示如下数据: • b is foo • a is bar • c is baz …但我的数据集看起来是这样的(或任何其他顺序,因为JSON不在乎): 我如何告诉Jinja2显示我的数据,并且按键总是按b a c顺序)?如果我不确定元素c是否总是存在该怎么办 我以为会是这样,但没有用: <ul> {% for key, value in my_dict.items()|dictsort(by=['b', 'a']) %} <li>{{ key }} is

假设我想显示如下数据:

• b is foo
• a is bar
• c is baz
…但我的数据集看起来是这样的(或任何其他顺序,因为JSON不在乎):

我如何告诉Jinja2显示我的数据,并且按键总是按
b a c
顺序)?如果我不确定元素
c
是否总是存在该怎么办

我以为会是这样,但没有用:

<ul>
{% for key, value in my_dict.items()|dictsort(by=['b', 'a']) %}
    <li>{{ key }} is {{ value }}</li>
{% endfor %}
</ul>
    {%表示键,my_dict.items()中的值| dictsort(by=['b','a'])%}
  • {{key}}是{{value}
  • {%endfor%}

您可以循环浏览硬编码的钥匙列表:

    {%用于输入('b','a','c')%} {%if在my_dict%中输入密钥}
  • {{key}}是{{my_dict[key]}
  • {%endif%} {%endfor%}

如果
测试处理不存在的键。

Python dict未排序,可能您可以从集合中使用:

import collections

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

我想这已经到了。问题是,也许我应该修正我的问题,可能有一些元素我不能忽略。我是否可以从字典中“弹出”
a
b
,并返回到硬编码循环中未包含的其他循环的默认表示形式?@niteshade:您可以跳过循环中的
a
b
,并明确地首先列出它们?或者,您可以为键创建一个列表(
list(my_dict)
)并对其进行操作,等等。我考虑过这一点,但不幸的是,我必须处理一个非常严格且不可预测的API。
import collections

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