Peut-on connaître la position des éléments dans le dictionnaire ordonné de Python?
Par exemple:
Si j'ai un dictionnaire:
// Ordered_dict is OrderedDictionary
Ordered_dict = {"fruit": "banana", "drinks": "water", "animal": "cat"}
Maintenant, comment savoir à quelle position cat
appartient? Est-il possible d'obtenir une réponse comme:
position (Ordered_dict["animal"]) = 2 ?
ou d'une autre manière?
Vous pouvez obtenir une liste de clés avec la propriété keys
:
In [20]: d=OrderedDict((("fruit", "banana"), ("drinks", 'water'), ("animal", "cat")))
In [21]: d.keys().index('animal')
Out[21]: 2
De meilleures performances pourraient être obtenues avec l'utilisation de iterkeys()
.
Pour ceux qui utilisent Python 3:
>>> list(d.keys()).index('animal')
2
Pour Python3: Tuple(d).index('animal')
C'est presque la même chose que la réponse de Marein ci-dessus, mais utilise un tuple immuable au lieu d'une liste mutable. Il devrait donc fonctionner un peu plus rapidement (~ 12% plus rapidement dans mon rapide test de santé mentale).
Pensez d'abord à lire la documentation. Si vous ouvrez un tutoriel Python puis essayez de trouver des informations sur OrderedDict, vous verrez ce qui suit:
collections de classes.OrderedDict ([items]) - Retourne une instance d'une sous-classe dict, prenant en charge les méthodes dict habituelles. Un OrderedDict est un dict qui se souvient de l'ordre dans lequel les clés ont été insérées pour la première fois. Si une nouvelle entrée remplace une entrée existante, la position d'insertion d'origine reste inchangée. Supprimer une entrée et la réinsérer la déplacera à la fin.
Nouveau dans la version 2.7.
Donc, si vous utilisez un dictionnaire ordonné et que vous n'allez pas supprimer de clés - alors `` animal '' sera toujours dans la position que vous ajoutez - par exemple index 2.
De plus, pour obtenir un index d'un "chat", vous pouvez simplement utiliser:
from collections import OrderedDict
d = OrderedDict((("fruit", "banana"), ("drinks", "water"), ("animal", "cat")))
d.keys()
>>> ['fruit', 'drinks', 'animal']
d.values()
>>> ['banana', 'water', 'cat']
# So
d.values().index('cat')
>>> 2