【发布时间】:2017-01-04 20:37:21
【问题描述】:
我试图在 for 循环中的模板中显示我的字典键和值,但我不想显示第一个键。 最好的方法是什么? 我想使用类似的东西
dictionary.keys()[0]
但我不能在模板中做到这一点。 或者可能在 for 循环中添加计数器(不确定如何在下面的循环中执行此操作) 这是我显示字典的循环-
{% for year, durations in durationDict.items %}
<optgroup label={{ year }}>
{% for duration in durations %}
<option data-from-date="{{ duration.from_date }}" data-to-date="{{ duration.to_date }}" value={{ duration.duration_id }}>{{ duration.from_date }}
- {{ duration.to_date }}</option>
{% endfor %}
{% endfor %}
【问题讨论】:
-
first dictionary key是什么意思? Python 字典是一个哈希表,它没有排序,所以键没有顺序。 -
字典中没有“第一个键”。如果相同的代码在不同的机器上运行,您可以执行
dict.keys()[0]的事实可能会给您带来令人惊讶的不同结果。它可以在您的本地机器上完美运行,而不是在生产中,它可能在今天运行,但明天不行。如果您想要序列,请使用元组列表。 -
也许你想了解哈希表是什么样子的:en.wikipedia.org/wiki/Hash_table
-
正如@ShangWang 指出的那样,python 的 dicts 不会保留顺序——如果您使用其他建议之一,您可能会忽略错误的键。 collections 标准库包含一个 OrderedDict 类,它可以满足您的需求。
-
我认为如果不知道您是要排除第一个 key (顺序无关)还是第一个 year (顺序相关的)。如果您只是想排除第一个键,也许@bozdoz 的答案就足够了,但如果您想排除第一年,您可能希望首先使用
sorted、sort、@987654329 对列表或元组中的键进行排序@、lambda或这些的组合。或者,如果您想根据插入顺序而不是键的数值进行排序,请按照前面的建议使用OrderedDict。
标签: python django dictionary