Question

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')

L'exécution de ce code sur Python 2.6 me donne le résultat suivant.

routeDelay = 2.0
property = path
totalDelay = 3.0
logicDelay = 1.0
label = ifft4k_radix4_noUnolling_core.vi

Je dois garder l'ordre des paramètres, je veux dire, property vient d'abord, puis label jusqu'à ce que je routeDelay dernière.

Q: Quelle est la façon de garder l'ordre des paramètres de dictionnaire Python

Était-ce utile?

La solution

  

Je dois garder l'ordre du   paramètre, je veux dire, la propriété est   Tout d'abord, puis étiquetez jusqu'à ce que je   reouteDelay dernier.

Ensuite, vous êtes tout simplement faire les choses dans le mauvais ordre - pas besoin de dictionnaires commandés! Essayez, à la place, un tuple de paires pour cache , comme suit:

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

a exactement la même sémantique que votre version de createNode, ainsi que la propriété désirée de maintenir l'ordre que vous souhaitez, et la performance est au moins aussi bon. En se concentrant sur « garder le dictionnaire ordonné » vous vous concentrez sur le mauvais problème (comme cela est le cas, hélas, pour plus cas où les gens arrivent pour « ordonné dictionnaires » -!).

Autres conseils

Un dictionnaire régulier ne fera pas, vous devrez utiliser un dictionnaire ordonné à la place. Consultez ces liens:

  1. PEP 372: Ajout d'un dictionnaire ordonné aux collections
  2. L'utilisation d'un dict commandé comme dictionnaire d'objets en python - une question de manière de prouver que les gens utilisent le odict PEP 372: -)
  3. module de odict Nicola Larosa & Michael Foord

Essayez le terme de recherche « dictionnaire python ordonné » si vous voulez Google autour de plus. Je me souviens avoir vu un certain nombre de questions relatives aux ordonnées dict ici, sur le SO, donc si les liens ci-dessus sont insuffisants pour une raison quelconque, peut-être vous pouvez trouver quelque chose de mieux dans une autre question.

Mise à jour: la suggestion de Mark d'utiliser une liste de tuples peut être parfaitement bien, en fait, mais tuples nommé peut être plus pratique: un fragment correspondant dans la documentation . En outre, si vous avez l'intention de faire un peu de sérialisation / désérialisation vos données et que vous souhaitez le faire très rapide , consultez Google de tampons de protocole (l'outillage de python disponible).

Les dictionnaires ne conservent pas l'ordre des clés. Vous pouvez utiliser une liste de tuples au lieu d'un dictionnaire.

scroll top