95 votes

Dernière touche dans le dictionnaire Python

J'ai du mal à comprendre quelle serait la syntaxe de la dernière clé d'un dictionnaire Python. Je sais que pour une liste Python, on peut dire ceci pour désigner la dernière :

list[-1]

Je sais également que l'on peut obtenir une liste des clés d'un dictionnaire de la manière suivante :

dict.keys()

Cependant, lorsque j'essaie d'utiliser le code logique suivant, cela ne fonctionne pas :

dict.keys(-1)

Il est dit que les clés ne peuvent pas prendre d'arguments et 1 est donné. Si keys ne peut pas prendre d'arguments, alors comment puis-je indiquer que je veux la dernière clé de la liste ?

Je pars du principe que les dictionnaires Python sont classés dans l'ordre dans lequel les éléments sont ajoutés au dictionnaire, l'élément le plus récent étant le dernier. Pour cette raison, je voudrais accéder à la dernière clé du dictionnaire.

On me dit maintenant que les clés du dictionnaire ne sont pas dans l'ordre en fonction de la date à laquelle elles ont été ajoutées. Comment pourrais-je alors choisir la clé la plus récemment ajoutée ?

99voto

Sam Bruns Points 4053

On dirait que c'est ce que vous voulez faire :

dict.keys()[-1]

dict.keys() renvoie une liste des clés de votre dictionnaire. Une fois la liste obtenue, l'indice -1 vous permet de récupérer le dernier élément d'une liste.

Puisqu'un dictionnaire n'est pas ordonné*, cela n'a pas de sens de récupérer la dernière clé de votre dictionnaire.

Vous voulez peut-être les trier avant. Cela ressemblerait à ça :

sorted(dict.keys())[-1]

Nota:

En Python 3, le code est

list(dict)[-1]

*Mise à jour :

Ce n'est plus le cas. Les clés de dictionnaire sont officiellement ordonnées à partir de Python 3.7 (et officieusement en 3.6).

63voto

root Points 14514

Si l'ordre d'insertion est important, jetez un coup d'œil à collections.OrderedDict :

Un OrderedDict est un dict qui se souvient de l'ordre dans lequel les clés ont été insérées. Si une nouvelle entrée écrase une entrée existante, la position d'insertion originale reste inchangée. Supprimer une entrée et la réinsérer la déplacera à la fin.


In [1]: from collections import OrderedDict

In [2]: od = OrderedDict(zip('bar','foo'))

In [3]: od
Out[3]: OrderedDict([('b', 'f'), ('a', 'o'), ('r', 'o')])

In [4]: od.keys()[-1]
Out[4]: 'r'

In [5]: od.popitem() # also removes the last item
Out[5]: ('r', 'o')

Mise à jour :

Un OrderedDict n'est plus nécessaire car les clés des dictionnaires sont officiellement ordonnées dans l'ordre d'insertion à partir de Python 3.7 (officieusement en 3.6).

Pour ces versions récentes de Python, vous pouvez à la place simplement utiliser list(my_dict)[-1] o list(my_dict.keys())[-1] .

17voto

En python 3.6 j'ai obtenu la valeur de la dernière clé à partir du code suivant

list(dict.keys())[-1]

16voto

Daniel Roseman Points 199743

Cela n'a pas de sens de demander la "dernière" clé d'un dictionnaire, car les clés de dictionnaire sont non ordonné . Vous pouvez obtenir la liste des clés et récupérer la dernière si vous le souhaitez, mais il ne s'agit en aucun cas de la "dernière clé d'un dictionnaire".

14voto

Depuis python 3.7, les dictées sont toujours ordonnées (insérer l'ordre),

depuis python 3.8 keys() , values() y items() de retour de dictée : vue qui peut être reversed :

à obtenir la dernière clé :

next(reversed(my_dict.keys()))  

il en va de même pour values() y items()

PS à obtenir la première clé utiliser : next(iter(my_dict.keys()))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X