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 ...。我可以从字典中“弹出”ab,然后回退到硬编码循环未涵盖的其他人的默认表示吗? @niteshade:您可以在循环中跳过 ab 并明确列出它们,也许?或者您可以为键 (list(my_dict)) 创建一个列表并对其进行操作,等等。

以上是关于jinja2:按定义的键顺序对字典进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

6.3 遍历字典

python按自定义顺序排序字典列表[重复]

按自然顺序对字典键进行排序[重复]

如何按字典顺序对 ArrayList 进行排序?

按字典顺序对c ++中的多维向量进行排序

c# Dictionary 字典的排序问题,请大家指点