¿Cuál es la manera de mantener el orden de los parámetros diccionario en Python?

StackOverflow https://stackoverflow.com/questions/2302663

  •  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, '=', value

doc = 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

¿Fue útil?

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

Diccionarios no preservan el orden de las claves. Se podría utilizar una lista de tuplas en lugar de un diccionario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top