字典排序的奇怪行为

时间:2015-12-20 12:27:26

标签: python pycharm

我使用此代码来形成字典:

tt_data[dt] = {}
for hour in range(work_begins, work_ends, 2):
    tt_data[dt][hour] = ''
    if Rehearsal.objects.filter(dt__year=dt.year, dt__month=dt.month, dt__day=dt.day, dt__hour=hour).exists():
        tt_data[dt][hour] = Rehearsal.objects.get(dt__year=dt.year, dt__month=dt.month,
                                                  dt__day=dt.day, dt__hour=hour)

奇怪的是," work_begins"等于14,这个元素到了dict的结尾:

enter image description here

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

谢谢,这个简单的编辑解决了这个问题:

-        tt_data[dt] = {}
+        tt_data[dt] = OrderedDict()

答案 1 :(得分:-1)

正如一些评论中所述,tt_data[dt]是一个标准的python字典,它是无序的。 (有关详细信息,请参阅https://docs.python.org/3.5/tutorial/datastructures.html#dictionaries)。

因此,虽然在其他日期时间示例中看起来存在值的顺序,但保证。

有些人还讨论了将按顺序保存的外部OrderedDict(tt_data)。这只是因为它将按照创建的顺序保存,而不是以任何排序顺序保存。 例如,如果您添加20/11/2015然后添加19/11/2015,它将不会根据日期重新排序