DjangoのSortedDict
-
13-12-2019 - |
質問
テンプレートに表示したい回数のリストを持つ辞書を持っています:
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>
.
しかしドロップダウンの要素は、辞書で定義されている順序では通過していません。私は何が足りないのですか?
解決
ルックこちら
あなたは「それは機能しない」ことをやっています、 i.e. ソート辞書への入力として辞書を入力します。
が欲しいSortedDict([
(0, 'Eternity'),
(15, '15 minutes'),
# ...
(300, '300 minutes'),
])
. 他のヒント
鍵をソート順に維持するPythonの多くの辞書実装の1つを使用することを検討してください。たとえば、 sortedContainersモジュールは、純粋なPythonとFast-Conterの実装です。高速取得/設定/ ITER操作をサポートし、キーをソートし続けます。パフォーマンス比較そのベンチマークは、他のいくつかの一般的な選択肢に対する実装をベンチマークします。
引数として「通常の」SortedDict
を使用してdict
をインスタンス化します。注文は失われます。順序付けを保持するITERABLEを持つSortedDict
をインスタンス化する必要があります。:
SortedDict((
(0, "Eternity"),
(15, "15 Minutes"),
# ...
))
. この回答は質問に正確に答えないかもしれません、あなたはDjangoテンプレートタグから「DictSort」と「DictSortReversed」を使用して通常のDictをソートすることができます。そのため、SortedDictを使用する必要はありません。
所属していません StackOverflow