¿Cuál es la forma correcta de inicializar un diccionario ordenado (OD) para que conserve el orden de los datos iniciales?
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])
Pregunta:
¿Se
OrderedDict
preservará el orden de una lista de tuplas, o una tupla de tuplas o una tupla de listas o una lista de listas, etc., aprobadas en el momento de la inicialización (segundo y tercer ejemplo anteriores)?¿Cómo se verifica si
OrderedDict
realmente se mantiene un orden? Como adict
tiene un orden impredecible, ¿qué sucede si mis vectores de prueba tienen el mismo orden inicial que el orden impredecible de un dict? Por ejemplo, si en lugar ded = OrderedDict({'b':2, 'a':1})
escribird = OrderedDict({'a':1, 'b':2})
, puedo concluir erróneamente que se conserva el orden. En este caso, descubrí que adict
está ordenado alfabéticamente, pero eso puede no ser siempre cierto. ¿Cuál es una forma confiable de usar un contraejemplo para verificar si una estructura de datos conserva el orden o no, a menos que intente probar vectores repetidamente hasta que uno se rompa?
PD: solo dejaré esto aquí como referencia : "El constructor OrderedDict y el método update () aceptan argumentos de palabras clave, pero su orden se pierde porque la función de Python llama a la semántica los argumentos de palabras clave de paso usando un diccionario regular sin ordenar"
PPS: Con suerte, en el futuro, OrderedDict también preservará el orden de los kwargs (ejemplo 1): http://bugs.python.org/issue16991