SortedDict в Джанго - PullRequest
       24

SortedDict в Джанго

1 голос
/ 14 марта 2012

У меня есть словарь со списком раз, который я хочу отобразить в шаблоне:

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 ]

5 голосов
/ 28 марта 2014

Рассмотрите возможность использования одной из многих реализаций словаря Python, которая поддерживает ключи в отсортированном порядке.Например, модуль sortedcontainers - это реализации на чистом Python и fast-as-C.Он поддерживает быстрые операции get / set / iter и поддерживает сортировку ключей.Существует также сравнение производительности , которое сравнивает реализацию с несколькими другими популярными вариантами.

5 голосов
/ 14 марта 2012

Смотри здесь .

Вы делаете "Это не работает", , т.е. , давая несортированный словарь в качестве входных данных для отсортированного словаря.

Вы хотите

SortedDict([
    (0, 'Eternity'),
    (15, '15 minutes'),
    # ...
    (300, '300 minutes'),
])
2 голосов
/ 14 марта 2012

Вы создаете экземпляр SortedDict с "нормальным" dict в качестве аргумента - ваш порядок потерян. Вы должны создать экземпляр SortedDict с итерацией, которая сохраняет порядок, например ::

SortedDict((
   (0, "Eternity"),
   (15, "15 Minutes"),
   # ...
))
1 голос
/ 19 февраля 2014

Этот ответ может не совсем отвечать на вопрос, вы можете использовать «dictsort» и «dictsortreversed» из тегов шаблонов django для сортировки обычного dict. Поэтому нет необходимости использовать SortedDict.

...