Comment obtenir des clés de dictionnaire sous forme de liste en Python

  1. dict.keys() pour obtenir les clés du dictionnaire Python
  2. Boucles pour obtenir les clés du dictionnaire Python
  3. Lister les compréhensions pour obtenir les clés du dictionnaire Python
  4. Décompression du dictionnaire Python opérateur * pour obtenir les clés
  5. Comparaison des performances d’exécution

Obtenir une vue des clés du dictionnaire sous forme de séquence est un cas d’utilisation quotidien en programmation Python.

Il existe plusieurs approches pour y parvenir, chacune ayant des caractéristiques de performance différentes.

dict.keys() pour obtenir les clés du dictionnaire Python

La fonction dict.keys() retourne dict_keys - une vue itérable des clés du dictionnaire.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> state_capitals.keys()
dict_keys(['California', 'Pennsylvania', 'Texas'])

Vous pouvez itérer sur dict_keys directement sans le convertir en une liste. Pour beaucoup de cas d’utilisation, dict_keys peut être abandonné au lieu d’une liste dans les APIs, et cela fonctionnera.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> for state in state_capitals.keys():
...   print(state)
...
California
Pennsylvania
Texas

Si vous avez besoin de travailler sur des clés de dictionnaire strictement comme sur des listes, par exemple, si vous voulez pour pouvoir utiliser un index pour lire une clé particulière de la séquence, vous devez convertir dict_keys dans une liste d’abord.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals.keys())
['California', 'Pennsylvania', 'Texas']

Notez que l’appel à dict.keys() est optionnel si vous voulez obtenir des clés sous forme de liste. Comme les dictionnaires Python sont itérables sur leurs clés, vous pouvez passer un dans un constructeur de liste.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals)
['California', 'Pennsylvania', 'Texas']

Boucles pour obtenir les clés du dictionnaire Python

Une propriété particulière des dictionnaires en Python est que lorsque vous itérez sur eux, vous itérez de leurs clés. Ainsi vous pouvez collecter toutes les clés du dictionnaire simplement en itérant par dessus.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = []
>>> for key im state_capitals:
...   keys.append(key)
...
>>> keys
['California', 'Pennsylvania', 'Texas']

Lister les compréhensions pour obtenir les clés du dictionnaire Python

Une amélioration syntaxique par rapport à l’utilisation des boucles peut être obtenue en utilisant les [listes de compréhension] de Python (https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions). Avec les compréhensions de liste, vous pouvez condenser la boucle ci-dessus en une seule ligne.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [key for key in state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

Décompression du dictionnaire Python opérateur * pour obtenir les clés

A partir de Python 3.5, nous pouvons utiliser l’opérateur unpacking * pour mettre la main sur les clés du dictionnaire. Cette fonctionnalité a été introduite avec PEP 448 - Additional Unpacking Generalizations.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [*state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

L’avantage de cette approche est que vous pouvez décompresser vos clés de dictionnaire dans d’autres collections que les listes, comme les tuples ou les ensembles.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys_tuple = *state_capitals,
>>> keys_tuple
('California', 'Pennsylvania', 'Texas')
>>> keys_set = {*state_capitals}
>>> keys_set
{'California', 'Pennsylvania', 'Texas'}

Comparaison des performances d’exécution

Les performances d’exécution de chacune des approches ci-dessus varient.

>>> from timeit import timeit
>>> timeit("list(state_capitals.keys())", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25394885599962436
>>> timeit("list(state_capitals)", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.17995373999929143
>>> timeit("for key in state_capitals: keys.append(key)", setup="keys = []; state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25294865500018204
>>> timeit("[key for key in state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.2447525150000729
>>> timeit("[*state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.0962776809992647

Comme le montrent les temps ci-dessus, l’opérateur de déballage * est le plus rapide.

Préférez le, à moins que vous n’ayez une bonne raison de vous rabattre sur une des autres approches.

Article connexe - Python dictionary

  • Comment vérifier si une clé existe dans un dictionnaire en Python
  • Comment trier un dictionnaire Python par valeur
  • Comment fusionner deux dictionnaires en Python 2 et 3
  • Comment retirer un élément d'un dictionnaire Python
  • comments powered by Disqus