341 votes

En Python, quand utiliser un dictionnaire, une liste ou un ensemble?

Quand devrais-je utiliser un dictionnaire, une liste ou un ensemble?

Y a-t-il des scénarios qui sont plus adaptés à chaque type de données?

641voto

Alex Martelli Points 330805

Une liste garde l'ordre, dict et set ne le font pas : lorsque vous vous souciez de l'ordre, vous devez donc utiliser une liste (si votre choix de conteneurs est limité à ces trois, bien sûr ;-)).

dict associe chaque clé à une valeur, tandis que list et set contiennent simplement des valeurs : des cas d'utilisation très différents, évidemment.

set exige que les éléments soient hashables, list ne l'exige pas : si vous avez des éléments non hashables, vous ne pouvez donc pas utiliser un set et devez plutôt utiliser une liste.

set interdit les doublons, list ne le fait pas : aussi une distinction cruciale. (Un "multiset", qui mappe les doublons en un décompte différent pour les éléments présents plus d'une fois, peut être trouvé dans collections.Counter - vous pourriez en construire un en tant que dict, si pour une raison étrange vous ne pouviez pas importer collections, ou, en Python pré-2.7 en tant que collections.defaultdict(int), en utilisant les éléments comme clés et la valeur associée comme le décompte).

Vérifier l'appartenance d'une valeur dans un set (ou dict, pour les clés) est incroyablement rapide (environ un temps constant et court), tandis que dans une liste, cela prend du temps proportionnel à la longueur de la liste dans le cas moyen et pire. Donc, si vous avez des éléments hashables, que vous vous moquez de l'ordre ou des doublons, et que vous voulez vérifier l'appartenance rapidement, set est meilleur que list.

16 votes

Notez que Python 3.7 a un dict ordonné par défaut

214voto

Jon Skeet Points 692016
  • Avez-vous juste besoin d'une séquence ordonnée d'éléments? Optez pour une liste.
  • Avez-vous juste besoin de savoir si vous avez déjà une valeur particulière, mais sans ordre (et vous n'avez pas besoin de stocker des doublons)? Utilisez un ensemble.
  • Avez-vous besoin d'associer des valeurs à des clés, afin de pouvoir les rechercher efficacement (par clé) ultérieurement? Utilisez un dictionnaire.

36 votes

Il s'agit de la partie "TL;DR" de la réponse ci-dessus d'Alex M. :-)

10 votes

Je pense que c'est le contraire.. Alex devrait donner ses votes à Jon. Cette réponse couvre à peu près tout et elle est beaucoup plus concise et claire.

1 votes

Si toutefois, vous aimez connaître la différence de complexité temporelle entre ces types de données, l'explication d'Alex fonctionne mieux

25voto

unutbu Points 222216

Lorsque vous souhaitez une collection non ordonnée d'éléments uniques, utilisez un set. (Par exemple, lorsque vous voulez l'ensemble de tous les mots utilisés dans un document).

Lorsque vous souhaitez collecter une liste ordonnée immuable d'éléments, utilisez un tuple. (Par exemple, lorsque vous voulez une paire (nom, numéro de téléphone) que vous souhaitez utiliser comme élément dans un set, vous auriez besoin d'un tuple plutôt que d'une liste car les sets nécessitent que les éléments soient immuables).

Lorsque vous souhaitez collecter une liste ordonnée mutable d'éléments, utilisez une list. (Par exemple, lorsque vous voulez ajouter de nouveaux numéros de téléphone à une liste : [numéro1, numéro2, ...]).

Lorsque vous souhaitez une correspondance des clés aux valeurs, utilisez un dict. (Par exemple, lorsque vous voulez un répertoire téléphonique qui fait correspondre les noms aux numéros de téléphone : {'John Smith' : '555-1212'}). Notez que les clés dans un dict ne sont pas ordonnées. (Si vous itérez à travers un dict (répertoire téléphonique), les clés (noms) peuvent apparaître dans n'importe quel ordre).

0 votes

Uh, il n'a pas demandé de tuples.

3 votes

@habnabit il ne l'a pas fait. mais moi, je l'ai fait

20voto

SLaks Points 391154
  • Utilisez un dictionnaire lorsque vous avez un ensemble de clés uniques qui se mappent à des valeurs.

  • Utilisez une liste si vous avez une collection ordonnée d'éléments.

  • Utilisez un ensemble pour stocker un ensemble non ordonné d'éléments.

5voto

Goose Points 179

Bien que cela ne couvre pas les set, c'est une bonne explication des dict et des list :

Les listes sont ce qu'elles semblent être - une liste de valeurs. Chacune d'entre elles est numérotée, en commençant par zéro - la première est numérotée zéro, la deuxième 1, la troisième 2, etc. Vous pouvez supprimer des valeurs de la liste et ajouter de nouvelles valeurs à la fin. Exemple : les noms de vos nombreux chats.

Les dictionnaires sont similaires à ce que leur nom suggère - un dictionnaire. Dans un dictionnaire, vous avez un 'index' de mots, et pour chacun d'eux une définition. En python, le mot est appelé une 'clé', et la définition une 'valeur'. Les valeurs dans un dictionnaire ne sont pas numérotées - elles ne sont pas dans un ordre spécifique non plus - la clé fait la même chose. Vous pouvez ajouter, supprimer et modifier les valeurs dans les dictionnaires. Exemple : annuaire téléphonique.

http://www.sthurlow.com/python/lesson06/

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