jinja2:按定义的键顺序对字典进行排序?
Posted
技术标签:
【中文标题】jinja2:按定义的键顺序对字典进行排序?【英文标题】:jinja2: sort dict by defined key order? 【发布时间】: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>
【问题讨论】:
【参考方案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 ...
。我可以从字典中“弹出”a
和 b
,然后回退到硬编码循环未涵盖的其他人的默认表示吗?
@niteshade:您可以在循环中跳过 a
和b
并明确列出它们,也许?或者您可以为键 (list(my_dict)
) 创建一个列表并对其进行操作,等等。以上是关于jinja2:按定义的键顺序对字典进行排序?的主要内容,如果未能解决你的问题,请参考以下文章