OrderedDict没有保持秩序

cor*_*vid 2 python ordereddictionary python-2.7

这个循环的想法是迭代列表.如果对象的某个属性不是OrderedDict的键,则会添加它.它是对象列表的字典

for object in someList:
  if object.DATE not in myOrderedDict:
     myOrderedDict[object.DATE]=[]
  myOrderedDict[object.DATE].append(object)
Run Code Online (Sandbox Code Playgroud)

虽然它似乎确实使OrderedDict大部分正确,但它在打印时最终会出现故障.而不是拥有类似的东西更像(01/13) (02/13) (03/13)(02/13) (03/13) (01/13).
为什么会发生这种情况?如何解决?

Zer*_*eus 6

看起来您希望OrderedDict按键排序a中的项目,但事实并非如此.OrderedDict按订单商品的顺序排序.从PEP 372 FAQ:

OrderedDict是否支持按字母顺序排列的备用排序顺序?

不.那些想要不同排序顺序的人真的需要使用其他技术.OrderedDict是关于记录插入顺序的.如果感兴趣任何其他顺序,那么另一种结构(如内存中的dbm)可能更适合.


Gra*_*ntJ 5

pure-Python sortedcontainers模块有一个可以帮助你的SortedDict类型.它按排序顺序自动维护dict键,并且有详细记录和测试.你就像用词一样使用它:

>>> from sortedcontainers import SortedDict
>>> mySortedDict = SortedDict()
>>> for object in someList:
>>>     if object.DATE not in mySortedDict:
>>>         mySortedDict[object.DATE]=[]
>>>     mySortedDict[object.DATE].append(object)
>>> list(mySortedDict.keys())
['(01/13)', '(02/13)', '(03/13)']
Run Code Online (Sandbox Code Playgroud)

已排序的容器模块非常快,并且具有性能比较页面,其中包含针对替代实现的基准.