J'ai la clé d'un dictionnaire python et je veux obtenir l'index correspondant dans le dictionnaire. Supposons que j'ai le dictionnaire suivant,
d = { 'a': 10, 'b': 20, 'c': 30}
Existe-t-il une combinaison de fonctions python pour obtenir la valeur d'index 1, étant donné la valeur de clé 'b'?
d.??('b')
Je sais que cela peut être réalisé avec une boucle ou un lambda (avec une boucle intégrée). Je pensais qu'il devrait y avoir un moyen plus simple.
Utilisez OrderedDicts: http://docs.python.org/2/library/collections.html#collections.OrderedDict
>>> x = OrderedDict((("a", "1"), ("c", '3'), ("b", "2")))
>>> x["d"] = 4
>>> x.keys().index("d")
3
>>> x.keys().index("c")
1
Pour ceux qui utilisent Python 3
>>> list(x.keys()).index("c")
1
Les dictionnaires en python n'ont pas d'ordre. Vous pouvez utiliser une liste de n-uplets comme structure de données.
d = { 'a': 10, 'b': 20, 'c': 30}
newd = [('a',10), ('b',20), ('c',30)]
Ensuite, ce code pourrait être utilisé pour trouver les emplacements des clés avec une valeur spécifique
locations = [i for i, t in enumerate(newd) if t[0]=='b']
>>> [1]
Non, il n'y a pas de solution simple car les dictionnaires Python ne disposent pas d'un ordre défini.
De la documentation :
Les clés et les valeurs sont répertoriées dans un ordre arbitraire non aléatoire, variable selon les implémentations Python et dépendant de l'historique d'insertion et de suppression du dictionnaire.
En d'autres termes, l'index de b
dépend entièrement de ce qui a été inséré et supprimé du mappage auparavant:
>>> map={}
>>> map['b']=1
>>> map
{'b': 1}
>>> map['a']=1
>>> map
{'a': 1, 'b': 1}
>>> map['c']=1
>>> map
{'a': 1, 'c': 1, 'b': 1}
A partir de Python 2.7, vous pouvez utiliser plutôt le type collections.OrderedDict()
, si l'ordre d'insertion est important pour votre application.