我有一个字典,其中包含我想在模板中显示的列表:
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>
但是下拉列表中的元素并没有以字典中定义的顺序出现。我错过了什么?
答案 0 :(得分:5)
看here。
你正在做“那不行”的事情,即给出未排序的字典作为排序字典的输入。
你想要
SortedDict([
(0, 'Eternity'),
(15, '15 minutes'),
# ...
(300, '300 minutes'),
])
答案 1 :(得分:5)
考虑使用Python的许多字典实现之一,按照排序顺序维护密钥。例如,sortedcontainers module是纯Python和快速实现。它支持快速get / set / iter操作并保持按键排序。还有一个performance comparison,可以根据其他几个流行的选择对实施进行基准测试。
答案 2 :(得分:2)
您使用“普通”SortedDict
作为参数实例化dict
- 您的排序将丢失。您必须使用保留排序的iterable实例化SortedDict
,例如:
SortedDict((
(0, "Eternity"),
(15, "15 Minutes"),
# ...
))
答案 3 :(得分:1)
这个答案可能无法准确回答这个问题,您可以使用django模板标签中的“dictsort”和“dictsortreversed”来排序普通字典。所以不需要使用SortedDict。