jinja2:按定义的键顺序对字典进行排序?
jinja2: sort dict by defined key order?
假设我想显示一些这样的数据:
• 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>
您可以遍历硬编码的键列表:
<ul>
{% for key in ('b', 'a', 'c') %}
{% if key in my_dict %}
<li>{{ key }} is {{ my_dict[key] }}</li>
{% endif %}
{% endfor %}
</ul>
不存在的键由 if
测试处理。
Python 字典没有排序,也许你可以使用集合中的 OrderedDict :
import collections
my_dict = {
"a": "bar",
"b": "foo",
"c": "baz"
}
my_ord_dict = collections.OrderedDict(my_dict)
假设我想显示一些这样的数据:
• 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>
您可以遍历硬编码的键列表:
<ul>
{% for key in ('b', 'a', 'c') %}
{% if key in my_dict %}
<li>{{ key }} is {{ my_dict[key] }}</li>
{% endif %}
{% endfor %}
</ul>
不存在的键由 if
测试处理。
Python 字典没有排序,也许你可以使用集合中的 OrderedDict :
import collections
my_dict = {
"a": "bar",
"b": "foo",
"c": "baz"
}
my_ord_dict = collections.OrderedDict(my_dict)