Python 字典排序的奇怪行为
我使用此代码形成一个字典:Python 字典排序的奇怪行为,python,pycharm,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] = Rehears
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的末尾:
感谢您的帮助。谢谢,这个简单的编辑解决了这个问题:
- tt_data[dt] = {}
+ tt_data[dt] = OrderedDict()
正如在几条注释中所述,
tt_data[dt]
是一个标准的python字典,它是无序的。(请参阅)以了解更多详细信息
因此,尽管在其他datetime示例中看起来像是值有顺序,但这是不能保证的
一些人还讨论了将保持有序的外部有序数据dict(
tt_data
)。这仅在它将按照创建的顺序而不是任何排序的顺序保存的意义上是正确的。例如,如果您先添加2015年11月20日,然后再添加2015年11月19日,则不会根据日期对其重新排序。tt\u data
的值是常规字典,而不是有序字典,对吗?常规字典是无序的。您的有序字典中的键是日期。屏幕截图的第二行被截断,但它显示了一个2元素元组的列表。第一个元素是键,它是一个日期对象,第二个元素是一个值,它是一个dict。这些键/日期是保持有序的东西,而不是与这些键相关联的值/dict。如果您想让值/指令保持有序,那么必须将它们创建为OrderedDict。就在这里:tt_data[dt]={}
为什么您认为{}
创建了一个OrderedDict?行:tt_data[dt][hour]=…
在{}
中插入条目。