Quelle est la façon de garder le paramètre dictionnaire pour en Python?
-
21-09-2019 - |
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, '=', valuedoc = 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
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:
- PEP 372: Ajout d'un dictionnaire ordonné aux collections
- 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: -)
- 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.