1

我有一本字典,其中包含我想在模板中显示的时间列表:

from django.utils.datastructures import SortedDict

time_filter = SortedDict({
    0 : "Eternity",
    15 : "15 Minutes",
    30 : "30 Minutes",
    45 : "45 Minutes",
    60 : "1 Hour",
    90 : "1.5 Hours",
    120 : "2 Hours",
    150 : "2.5 Hours",
    180 : "3 Hours",
    210 : "3.5 Hours",
    240 : "4 Hours",
    270 : "4.5 Hours",
    300 : "5 Hours"
})

我想在模板中创建一个下拉列表:

<select id="time_filter">
    {% for key, value in time_filter.items %}
        <option value="{{ key }}">{{ value }}</option>
    {% endfor %}
</select>

但是下拉列表中的元素并没有按照字典中定义的顺序出现。我错过了什么?

4

4 回答 4

5

考虑使用 Python 的许多字典实现之一,该实现按排序顺序维护键。例如,sortedcontainers 模块是纯 Python 和 fast-as-C 实现。它支持快速获取/设置/迭代操作并保持键排序。还有一个性能比较,将实现与其他几个流行的选择进行基准比较。

于 2014-03-28T16:56:34.117 回答
5

这里

您正在做“那不起作用”的事情,即将未排序的字典作为已排序字典的输入。

你要

SortedDict([
    (0, 'Eternity'),
    (15, '15 minutes'),
    # ...
    (300, '300 minutes'),
])
于 2012-03-13T20:34:30.580 回答
2

SortedDict你用“正常”dict作为参数实例化- 你的排序丢失了。您必须SortedDict使用保留顺序的可迭代对象来实例化,例如:

SortedDict((
   (0, "Eternity"),
   (15, "15 Minutes"),
   # ...
))
于 2012-03-13T20:35:32.490 回答
1

这个答案可能不能完全回答问题,您可以使用 django 模板标签中的“dictsort”和“dictsortreversed”对普通 dict 进行排序。所以没有必要使用 SortedDict。

于 2014-02-19T18:56:28.407 回答