web-dev-qa-db-fra.com

Comment obtenir l'index avec la clé dans le dictionnaire Python?

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.

15
chapter3

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
37
Kiwisauce

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]
0
Matt Alcock

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.

0
Martijn Pieters