初始化有序字典(OD)以保持初始数据顺序的正确方法是什么?
from collections import OrderedDict
# Obviously wrong because regular dict loses order
d = OrderedDict({'b':2, 'a':1})
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b',2), ('a', 1)])
# What about using a list comprehension, will 'd' preserve the order of 'l'
l = ['b', 'a', 'c', 'aa']
d = OrderedDict([(i,i) for i in l])
题:
OrderedDict是否会保留元组列表的顺序,或者在初始化时传递的元组元组或元组元组或列表列表等(上面的第2和第3例)?
如何验证OrderedDict是否实际维护订单? 由于dict具有不可预测的顺序,如果我的测试向量幸运地具有与dict的不可预测顺序相同的初始顺序,该怎么办? 例如,如果我写d = OrderedDict({'a':1, 'b':2})而不是d = OrderedDict({'b':2, 'a':1}),我可能错误地断定订单被保留。 在这种情况下,我发现dict按字母顺序排序,但可能并非总是如此。 使用反例来验证数据结构是否保留顺序的可靠方法是什么,没有重复尝试测试向量直到中断?
附: 我将这里留下来作为参考:“OrderedDict构造函数和update()方法都接受关键字参数,但它们的顺序丢失,因为Python的函数使用常规无序字典调用语义传入关键字参数”
P.P.S:希望将来,OrderedDict也能保留kwargs的顺序(例1):[http://bugs.python.org/issue16991]