vectores una recorrer matriz matrices llenar imprimir ejemplos dinamicos declarar como bidimensionales arreglos arreglo python dictionary order ordereddictionary

python - una - ¿Forma correcta de inicializar un OrderedDict usando su constructor de modo que conserve el orden de los datos iniciales?



recorrer una matriz en python (2)

¿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:

  • ¿Un OrderedDict conservará el orden de una lista de tuplas, o tuplas de tuplas o tuplas de listas o lista de listas, etc. aprobadas en el momento de la inicialización (segundo y tercer ejemplo anterior)?

  • ¿Cómo se puede verificar si OrderedDict realmente mantiene un pedido? Como un dict tiene un orden impredecible, ¿qué pasa si mis vectores de prueba tienen afortunadamente el mismo orden inicial que el orden impredecible de un dict? Por ejemplo, si en lugar de d = OrderedDict({''b'':2, ''a'':1}) escribo d = OrderedDict({''a'':1, ''b'':2}) , puedo concluir erróneamente que el orden se conserva. En este caso, descubrí que un dict 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 intentes tratar los vectores de prueba repetidamente hasta que se rompe?

PD: Dejaré esto aquí como reference : "Tanto el constructor OrderedDict como el método update () aceptan argumentos de palabra clave, pero su orden se pierde porque la función de Python llama argumentos semánticos de contraseña de paso usando un diccionario desordenado regular"

PPS: con suerte, en el futuro, OrderedDict conservará el orden de kwargs también (ejemplo 1): http://bugs.python.org/issue16991


OrderedDict preservará cualquier orden a la que tenga acceso. La única manera de pasarle los datos ordenados para inicializar es pasar una lista (o, más generalmente, un iterable) de pares clave-valor, como en los dos últimos ejemplos. Como dice la documentación a la que vinculó, OrderedDict no tiene acceso a ningún pedido cuando pasa argumentos de palabra clave o un argumento dict, ya que cualquier orden se elimina antes de que el constructor OrderedDict lo vea.

Tenga en cuenta que el uso de una lista de comprensión en su último ejemplo no cambia nada. No hay diferencia entre OrderedDict([(i,i) for i in l]) y OrderedDict([(''b'', ''b''), (''a'', ''a''), (''c'', ''c''), (''aa'', ''aa'')]) . La lista de comprensión se evalúa y crea la lista y se transfiere; OrderedDict no sabe nada sobre cómo se creó.


# An OD is represented by a list of tuples, so would this work? d = OrderedDict([(''b'', 2), (''a'', 1)])

Sí, eso funcionará. Por definición, una lista siempre se ordena de la manera en que se representa. Esto también se aplica a la comprensión de la lista, la lista generada es de la misma manera en que se proporcionaron los datos (es decir, la fuente de una lista será determinista, no se obtendrá tanto de un set ni de un dict ).

¿Cómo se puede verificar si OrderedDict realmente mantiene un pedido? Dado que un dict tiene un orden impredecible, ¿qué pasa si mis vectores de prueba tienen afortunadamente el mismo orden inicial que el orden impredecible de un dict ?. Por ejemplo, si en lugar de d = OrderedDict({''b'':2, ''a'':1}) escribo d = OrderedDict({''a'':1, ''b'':2}) , puedo concluir erróneamente que el orden se conserva. En este caso, descubrí que un dict se ordena alfabéticamente, pero eso puede no ser siempre cierto. es decir, ¿cuál es una forma confiable de utilizar un ejemplo de contador para verificar si una estructura de datos conserva el orden o si no se trata de probar vectores de prueba repetidamente hasta que se rompe uno?

Mantiene su lista de origen de 2 tuplas para referencia y la utiliza como datos de prueba para sus casos de prueba cuando realiza pruebas unitarias. Itere a través de ellos y asegúrese de que se mantenga el orden.