字典排序的奇怪行为

2024-04-25 22:06:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我用这个代码组成一个字典:

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\u begins”等于14时,这个元素会转到dict的末尾:

enter image description here

谢谢你的帮助。你知道吗


Tags: 代码infordata字典objectsdtyear
2条回答

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

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

正如在几个注释中所述,tt_data[dt]是一个标准的python字典,它是无序的。(详见https://docs.python.org/3.5/tutorial/datastructures.html#dictionaries)。你知道吗

因此,尽管在其他datetime示例中看起来值有一个顺序,但这是不能保证的。你知道吗

一些人还讨论了将保持有序的外部有序信息(tt_data)。这是真实的,只有在这个意义上,它将保持在顺序,它是创建,而不是在任何排序的顺序。例如,如果您添加20/11/2015,然后添加19/11/2015,则不会根据日期重新排序。你知道吗

相关问题 更多 >