¿Cuál es la manera de mantener el orden de los parámetros diccionario en Python?
-
21-09-2019 - |
Pregunta
def createNode(doc_, **param_): cache = {'p':'property','l':'label','td':'totalDelay','rd':'routeDelay','ld':'logicDelay'} for index in param_: newIndex = cache[index] value = param_[index] print newIndex, '=', valuedoc = 10 createNode(doc, p='path', l='ifft4k_radix4_noUnolling_core.vi', td='3.0', ld='1.0', rd='2.0')
Me ejecución de este código en Python 2.6 da el siguiente resultado.
routeDelay = 2.0 property = path totalDelay = 3.0 logicDelay = 1.0 label = ifft4k_radix4_noUnolling_core.vi
necesito para mantener el orden de los parámetros, es decir, property
viene primero, luego label
hasta que llegue routeDelay
pasado.
Q: ¿Cuál es la manera de mantener el orden de los parámetros diccionario en Python
Solución
Necesito mantener el orden de la parámetro, es decir, la propiedad viene primero, a continuación, la etiqueta hasta que llegue reouteDelay pasado.
A continuación, usted es simplemente hacer las cosas en el orden equivocado - no hay necesidad de diccionarios ordenados! Intenta, en cambio, una tupla de pares de caché , de la siguiente manera:
def createNode(doc_, **param_):
cache = ( ('p', 'property'), , ('l', 'label'), ('td', 'totalDelay'),
('rd', 'routeDelay'), ('ld', 'logicDelay') )
for index, newIndex in cache:
if index not in param_:
continue
value = param_[index]
print newIndex, '=', value
Esto tiene exactamente la misma semántica que su versión de createNode
, además de la propiedad deseada de mantener el orden que desee, y el rendimiento es al menos tan buena. Al centrarse en "mantener el diccionario ordenó" usted está centrado en el problema equivocado (como es el caso, por desgracia, por más casos donde las personas llegan a "diccionarios ordenados!" -).
Otros consejos
Un diccionario tradicional no va a hacer, vas a tener que usar un diccionario ordenó su lugar. Echa un vistazo a estos enlaces:
- PEP 372: Adición de un diccionario ordenado a las colecciones
- El uso de un dict ordenada como objeto de diccionario en Python - una cuestión SO para demostrar que la gente está utilizando odict PEP 372: -) odict módulo del
- Nicola Larosa y Michael Foord
Trate el término de búsqueda "pitón ordenó diccionario" si quieres Google por más. Recuerdo haber visto una serie de preguntas relacionadas con dict ordenados aquí, en el SO, por lo que si los enlaces de arriba son inadecuados, por alguna razón, tal vez pueda encontrar algo mejor en alguna otra pregunta.
Actualización: sugerencia de Mark utilizar una lista de tuplas puede ser perfectamente bueno, en realidad, pero tuplas nombradas puede ser más conveniente: un fragmento relevante en los docs . Además, si usted está planeando hacer un poco de serialización / deserialización de sus datos y le gustaría hacerlo muy rápido , echa un vistazo a búferes de protocolo (Python utillaje disponible).
Diccionarios no preservan el orden de las claves. Se podría utilizar una lista de tuplas en lugar de un diccionario.