Session du 19 février 2025 à 21h00
Veille & Discussions
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat TOSA sur les similitudes et complémentarités entre dictionnaires et ensembles
Session de mentorat TOSA sur les similitudes et complémentarités entre dictionnaires et ensembles
00:00:00 :Voilà, donc l'objectif aujourd'hui est de discuter ensemble de les similitudes et lesdifférences entre les dictionnaires et les ensembles. La semaine dernière vous avezeu un mentorat mardi, sauf erreur, où vous avez discuté du hachage et du rôle du hachagedans les dictionnaires. Alors on va voir que c'est un peu pareil dans les ensembles, mais
00:00:28 :ce qu'on va voir également, c'est qu'une partie d'un dictionnaire est un ensemble etdonc on peut se servir de cette composante ensemble dans les dictionnaires, dans nos algorithmeset on va voir quelques exemples qui mettent à profit ce genre de choses. Donc ça c'est
00:00:47 :l'objectif aujourd'hui. N'hésitez pas à poser des questions si vous en avez et moije partage mon écran. Donc ici vous devriez arriver sur un notebook, donc sur Google
00:00:59 :Chrome. Est-ce que vous voyez bien mon Google Chrome ? Alors, est-ce que vous voyez bienmon écran ? Alors je vois les pouces, c'est bon. OK. Donc quand je suis sur partage d'écran,
00:01:23 :je ne vois pas forcément les pouces, les mains levées. Donc n'hésitez pas de votrecôté, si vous avez des questions à tout moment, à simplement prendre la parole etm'interrompre. Comme ça, on vient directement sur la question. Je vais laisser rentrer
00:01:38 :les personnes qui arrivent au fur et à mesure. Voilà. Donc, vous avez déjà probablementtous et toutes l'habitude d'utiliser des dictionnaires et peut-être moins les ensembles,bien que ce soit un type qui soit très puissant. Donc ici, l'idée, c'est que par exemple
00:02:00 :dans un dictionnaire, vous avez une structure. Bonsoir. Bonsoir. Donc on a commencé sansvous, mais n'hésitez pas à prendre le train en route. Je suis juste en train ici de coder
00:02:16 :un petit dictionnaire. On est en train de voir d'abord ce qu'est en dictionnaire, ensuitece qu'est en ensemble, parce que le Montaura d'aujourd'hui portera surtout sur les ensembleset essaiera d'étendre le sujet du Montaura de la semaine dernière sur les tables departage, mais dans le contexte, cette fois, des ensembles. Voilà. Alors, bonsoir. Donc
00:02:44 :nous sommes ici en train de donner un petit exemple de dictionnaire et puisque l'IAici me propose ceci, on va simplement garder cela et nous avons un dictionnaire. Donc ici,
00:02:56 :vous connaissez parfaitement bien cette structure de données. Cette structure de données acertains avantages et notamment grâce au mécanisme du hachage que vous avez vu dansle Montaura de la semaine dernière, il est possible de retrouver des données avec untemps constant, même si le dictionnaire est relativement grand. Donc ici, je peux très
00:03:20 :facilement sortir par exemple la clé C du dictionnaire, ici qui est évidemment 3. Etça, il va le trouver dans un temps constant, ce qu'on appelle en termes algorithmiquesdans un temps qui est proportionnel à 1, donc on utilise souvent la notation big Ocomme ça, ce qui veut dire que le temps qui permet la récupération de la donnée
00:03:43 :ne dépend pas du nombre d'éléments qui sont dans le dictionnaire. Donc même si j'aiun millier d'éléments dans ce dictionnaire, il va très rapidement trouver l'élémentqui a la clé C. Et pourquoi ? Vous l'avez vu la semaine dernière, parce que la clé
00:04:01 :C va être aduite par le dictionnaire et par la fonction H, ici qui est une fonctionnative de Python. La fonction H va transformer cette chaîne de caractère C en nombre, en
00:04:15 :entier, et cet entier va être utilisé par le dictionnaire pour savoir où stocker cechiffre 3. Et ainsi, chaque fois que j'utiliserai comme indice de mon dictionnaire la chaîne
00:04:26 :de caractère C, alors Python va prendre la clé, la hacher avec la fonction H, etobtenir une sorte d'adresse si vous voulez, même si c'est pas si simple que ça, pouraller chercher la valeur chiffre 3. Donc ça c'est le mécanisme derrière les dictionnaires.
00:04:50 :L'objectif de ce mécanisme c'est justement d'avoir cette recherche rapide. Finalement,on a la même contrainte avec les ensembles. Donc qu'est-ce qu'un ensemble ? Un ensemble,
00:05:05 :on va dire que c'est un dictionnaire, mais qui aurait que des clés, pas de valeur. Doncici, un ensemble, un exemple d'ensemble ça va être 3 valeurs, alors ici pour reprendreexactement cet exemple on va prendre A, B et C. Donc ça c'est un ensemble, donc ne
00:05:30 :pas se tromper, la syntaxe utilisée par Python pour les ensembles est très proche de celledes dictionnaires. On a la collade ici, qui est reprise ici. La seule différence c'est
00:05:41 :qu'on n'a pas de valeur, donc on n'a pas le deux points et une valeur comme en ici,mais on a comme en dictionnaire où il n'y aurait que des clés. Et c'est pas un hasard
00:05:54 :si je vous dis ça, si je vous dis que c'est comme en dictionnaire où on n'aurait quedes clés. En fait, c'est exactement ça. C'est en dictionnaire où on n'aurait que
00:06:04 :des clés. Parce qu'en effet, Python utilise les mêmes propriétés des éléments pouraller stocker en mémoire les différents éléments de l'ensemble. En effet, ces différents
00:06:23 :éléments qu'on va pouvoir mettre dans un ensemble doivent être hachables et Pythonva aller calculer la valeur de hachage de chacun de ces éléments. C'est ce qui lui
00:06:35 :permettra par exemple de répondre à certaines questions très rapidement, comme par exemplede savoir si un est à l'intérieur d'un ensemble. Et ça, c'est aussi une opération
00:06:48 :qui va être réalisée dans un temps constant. C'est-à-dire que même si ici je rajouteles 26 lettres de l'alphabet, alors je ne vais pas les rajouter les 26 ici, mais mêmesi j'ajoute un millier d'éléments dans mon ensemble, il va trouver exactement, ilva savoir exactement si un élément se trouve dans cet ensemble sans avoir à parcourir
00:07:12 :tout l'ensemble. Si vous faites cette même opération avec une liste, donc ici par exempleon peut transformer cet ensemble en une liste. Le seul contrainte pour transformer ça en
00:07:28 :une liste, c'est de remplacer les accolades par des crochets. Alors vous pouvez égalementfaire ceci, une liste, et ici il va vous retourner le trou. Mais ici on a une grande différence
00:07:46 :entre ces deux opérations-là, de savoir si E est dans l'ensemble. Donc ici je vaisfaire exécuter toutes les lignes de mon code. Donc de savoir si E est dans l'ensemble
00:08:03 :ou si E est dans une liste, c'est très différent. Et c'est d'ailleurs des fautes que fontsouvent les débutants. C'est-à-dire que si vous avez à tester si une valeur fait
00:08:16 :partie d'une collection, utilisez, si c'est possible, plutôt un ensemble qu'une liste.Pourquoi ? Parce que l'opération E in ensemble ici, c'est constant. Donc même si vous avez
00:08:28 :10 000 éléments ici dans cet ensemble, le bidon va immédiatement trouver si cet élément-làse trouve dans l'ensemble. Tandis qu'ici, avec la liste, la recherche va se faire en
00:08:43 :un temps proportionnel à N, où N serait la longueur de cette liste. Donc ici si vousavez 10 000 éléments et que vous n'avez pas de chance, l'élément que vous cherchezc'est le dernier. Ce que Python va faire, c'est qu'il va regarder si l'élément que
00:08:55 :vous cherchez c'est le premier élément. Et puis si ce n'est pas le premier élément,il va regarder si c'est le deuxième. Et si ce n'est pas le deuxième, il va regarder
00:09:02 :si c'est le troisième, etc. Donc il va faire N recherche. Donc si N est égal à 10 000,il va faire 10 000 comparaisons pour savoir si l'élément que vous cherchez est dansla liste. Tandis qu'avec l'ensemble, grâce au HH, il va immédiatement savoir, en calculant
00:09:23 :cette valeur H de E, en l'occurrence ici, il va obtenir une valeur et immédiatementsavoir si cette valeur fait partie de l'ensemble. Ça c'est le truc. C'est la différence subtile
00:09:40 :entre une liste et un ensemble. Une chose que beaucoup moins de personnes savent, c'estque dans les dictionnaires, on a un côté ensembliste. Ça veut dire que si je prends
00:09:52 :ce dicot ici, les clés peuvent être vues comme un ensemble. Ici, ajoutons encore deuxou trois clés. Donc E ici est associé à 4 et est associé à 5. Donc dans ce dictionnaire,
00:10:12 :je prétends que les clés se comportent comme un ensemble. Et comment est-ce que j'obtiensles clés dans le dictionnaire ? Simplement avec dicot.keys. Donc dicot.keys me retourne
00:10:29 :les clés dans le dictionnaire. Mais ne vous faites pas avoir par cette sorte ici de notationavec des crochets. Cette méthode keys va retourner techniquement une sorte de structure
00:10:43 :donnée, une vue des dictionnaires, une vue des clés des dictionnaires qui se présententsous forme d'un ensemble. Comment vous prouver ça ? Comment vous prouver ça ? En essayant
00:10:56 :de réaliser certaines opérations qui sont propres aux ensembles. Essayons de voir lesopérations et à quoi vous sert un ensemble. Je vais prendre pour ça deux ensembles, E1
00:11:09 :et E2. E1 ici va être 1, 2, 3 et 4. Et puis E2 va simplement être 2 et 3. Donc ici,ou même carrément ça, quand même 2 et 3. Donc quelles sont les opérations qu'on peut
00:11:34 :faire sur un ensemble ? Est-ce que certains d'entre vous ont déjà utilisé les ensemblesen pythons et peuvent me citer une ou deux opérations qu'il est possible de faire avecun ensemble ? L'intersection par exemple. L'intersection. Qu'est-ce qu'il y a d'autre ?
00:11:59 :Ou l'union aussi. Pardon ? L'union. L'union, voilà. Il y a l'intersection, l'union etpuis il va y avoir aussi, de savoir si c'est un sous-ensemble ou pas. Donc ici par exemple
00:12:14 :je peux, par exemple, soustraire les ensembles et effectivement je vais voir déjà la différenceentre deux ensembles. Donc ici si je soustrais ces ensembles, je vais voir que j'aurai finalement
00:12:33 :1 et 4. Il nous reste 1 et 4. Donc ici j'ai les éléments de E1 qui ne font pas partiede E2. Ici l'union, réaliser une union ne ferait pas beaucoup de sens parce que les
00:12:47 :deux clés que j'ai choisies font partie de cet ensemble-là, mais on a donc différentespossibilités que vous avez toutes énumérées ici dans la doc de Python. Si on va dans la
00:12:58 :doc de Python et qu'on va dans la library reference, et dans la library reference vousallez directement au chapitre lié aux ensembles. Donc puisqu'on parle en français ici, je
00:13:13 :vais switcher sur la doc francophone, et puis vous avez les types d'ensemble, le set etle frozen set ici, et vous aurez les différentes opérations supportées. Donc là vous avez
00:13:26 :le is-subset, donc ici il permettra de voir si par exemple un ensemble est un sous-ensembled'un autre. Mais on a parlé des opérations d'union, donc l'union ici est représentée
00:13:41 :par la barre verticale. Donc ici, si j'utilise pour le coup une barre verticale, j'ai effectivementl'union de ces deux ensembles, mais comme E2 est un sous-ensemble de E1, alors finalementce que je vais obtenir c'est que E1, barre verticale E2, sera la même chose que E1 pourle coup, parce que E2 n'apporte pas de nouveaux éléments. Par contre ce qu'on peut vérifier,
00:14:08 :c'est que E2 est un sous-ensemble de E1. Comment est-ce que je vérifie ça ? Je peux voirdans la doc ici, je regarde is-subset ici, is-superset ici, donc je vais voir si otherest un superset de 7, ou alors est-ce que 7 est un sous-ensemble de other. Donc ici,
00:14:31 :je vais pouvoir tester si E2 est un sous-ensemble de E1, ici c'est le cas. Et E2 n'est évidemmentpas un superset de E1, puisque E2 comprend deux éléments qui sont effectivement incluslà-dedans. Donc vous avez ces opérations assemblistes qui sont super pratiques, parce
00:14:54 :que ici par exemple si je rajoute un 5, pour le coup, et que je regarde, E2 n'est plusun sous-ensemble de E1, puisqu'il comprend effectivement deux et trois qui appartiennentà E1, mais E5 est différent. Alors ce que je prétends maintenant, c'est que ici, dico.keys
00:15:13 :est finalement aussi un ensemble. Donc essayons de voir ça. Ici, dico.keys, c'est A, B,C, D, E. Donc ici, on va juste créer un ensemble, que je vais appeler E, et mettons qu'il va
00:15:29 :reprendre B, C. Donc s'il reprend B et C, je dois pouvoir utiliser les opérationsassemblistes. Ça veut dire qu'ici, si je fais dico.keys moins E, il devrait vous rester
00:15:53 :A, D et E, et simplement B et C auront été éliminés. Je teste, et je vois que c'estle cas. Donc l'opération de la différence, le moins ici, la différence est supportée
00:16:11 :ici par dico.keys. Je peux faire le même test et vérifier que E est un sous-ensembledes clés du dictionnaire. E est un sous-ensemble de dico.keys ici. Donc en fait, j'ai ici
00:16:38 :vraiment littéralement un ensemble que je peux utiliser et manipuler avec d'autresensembles pour, finalement, mon avantage. Par exemple, essayons de voir quelques casd'usage. Imaginons qu'on a deux dictionnaires, et qu'on veut par exemple s'assurer qu'on
00:17:03 :veut fusionner ces deux dictionnaires, et on veut s'assurer par exemple que s'il y aun dupliquant entre ces deux dictionnaires, le deuxième dictionnaire ne va pas écraserle tout. Donc créons deux dictionnaires. Un dictionnaire D1, et ce dictionnaire D1,
00:17:22 :on va lui mettre un certain nombre de clés, et le dictionnaire D2, pour le coup il a commencéà me le créer, on va lui mettre en C ici, et qu'est-ce que je vais lui mettre d'autre,on va lui mettre un C en F, alors un C qui a cette fois une valeur de 30, et puis on
00:17:47 :va lui mettre un F qui a une valeur de 40, et puis pour le coup un H qui a une valeurde 50. Hop, j'essaie de reprendre le fil de mes notes. Voilà, excusez-moi. Et donc
00:18:18 :maintenant, je vais par exemple essayer de fusionner ces dictionnaires. Si je fusionneces dictionnaires, alors ici, on va dire D, simplement. Il y a plusieurs techniques
00:18:31 :pour fusionner les dictionnaires, alors utilisons une technique assez visuelle ici, où j'ajouteles deux mêmes dictionnaires dans un dictionnaire comme ceci, et je visualise le dictionnaireD. Donc ce que je peux voir, c'est que j'ai créé un dictionnaire à partir des clés
00:18:49 :qui sont situées, des clés et des valeurs qui sont situées dans D1, et des clés etdes valeurs qui sont situées dans D2. Ce que je peux voir ici, c'est que la clé C,
00:19:03 :ici du premier dictionnaire, a été modifiée par cette fusion, puisqu'il y a égalementune clé C à l'intérieur du deuxième dictionnaire, et comme il y a une clé C qui a une valeurdifférente de 30, c'est effectivement ce C égale 30 que je vais retrouver ici dansle deuxième. Alors, comment éviter tout ça ? Alors, on peut par exemple essayer de détecter
00:19:32 :relativement facilement, ici, les clés qui sont en conflit. Donc ici, on pourrait essayerd'identifier les conflits. Comment identifier les conflits ? En fait, ce que j'appelle conflit,
00:19:48 :ici, c'est qu'il y a une clé qui se trouve dans les deux dictionnaires. Donc, je dois pouvoir,via les opérations « ensemblisses », trouver très rapidement les clés qui se trouvent dansles deux dictionnaires. Comment est-ce que je fais ? Je prends un ensemble des clés du
00:20:06 :premier dictionnaire et l'ensemble des clés du deuxième dictionnaire et j'utilise l'intersection.Ok ? L'intersection, pour ceux qui n'ont pas l'habitude d'utiliser les ensembles,l'intersection, c'est la fonction intersection, ou mieux, c'est l'opérateur, ici, « et » ou« and person ». Ok ? Donc, ici, ce que je vais faire, c'est que je vais prendre les clés du
00:20:32 :dictionnaire D1, donc D1.quis, puis je vais utiliser l'intersection et, ici, les clés de D2. Jepeux donc vérifier que les conflits potentiels, ici, c'est uniquement la clé C. J'ai uniquement
00:20:53 :une clé qui appartient aux deux dictionnaires. Et ça, je le fais uniquement à l'aide de laméthode quis du dictionnaire. Et ensuite, je peux éventuellement les fusionner, mais cette fois,
00:21:10 :sans finalement écraser la clé qui pose problème. Donc, je vais éventuellement modifier ce deuxièmeajout, ici. Alors, par exemple, je peux créer un dictionnaire, ici, mais cette fois, je peux
00:21:26 :éliminer les clés conflictuelles. Donc, je vais pouvoir créer une clé et une valeur pour toutesles clés et valeurs dans les items de D2, si la clé n'est pas, et cette fois, n'est pas dans lesconflits, dans les clés conflictuelles. Et ainsi, je vois que j'ai une fusion des deux dictionnaires.
00:22:03 :C'est un petit peu plus long, bien sûr, comme syntaxe, parce que par défaut, la syntaxe que jevais avoir par défaut, donc celle que j'avais prise tout à l'heure comme exemple, à savoir, ici,je fusionne D1 et D2. Par défaut, s'il y a une clé conflictuelle, c'est la clé qui appartient au
00:22:24 :deuxième dictionnaire qui va gagner. Et puis donc, le C, ici, est égal à 30. Tandis qu'ici, j'évitele problème, je calcule très rapidement à l'aide des opérations ensemblistes, quelles sont lesclés conflictuelles potentielles, et ensuite, je prends le dictionnaire, le premier dictionnaire,et ensuite, je prends le deuxième dictionnaire, mais je filtre toutes les clés qui sont dans les
00:22:50 :conflits. Et puisque conflit, ici, est un ensemble, cette opération not-in, ici, est aussi trèsefficace. Donc, techniquement, cette compréhension de dictionnaire, ici, est relativement efficiente
00:23:05 :en termes de calcul, et très rapidement, il peut donc me fusionner les dictionnaires en évitantd'écraser les clés qui existent déjà dans le premier. Ça, donc, c'est une application possible
00:23:20 :du fait que la méthode KISS me retourne une structure de données qui se comporte comme unensemble. Les opérations ensemblistes sont possibles. Vous pouvez également, comme deuxième
00:23:38 :application, par exemple, vouloir vérifier qu'un certain nombre, ou valider qu'un certain nombrede clés se trouvent dans un dictionnaire. Donc ici, peut-être que je vais ajouter ici,
00:23:53 :donc, vérifions, vérifier, vérifier, qu'un ensemble de clés, qu'un ensemble de clés se trouvent dansun dictionnaire, dans Zandico. OK, comment je fais ça ? Pareil, je pourrais imaginer que j'ai un
00:24:14 :ensemble de données. Donc, un dictionnaire data, un dictionnaire, on a dit. Ce dictionnaire,par exemple, représente des données au sujet d'une personne. Donc ici, name, Thierry. Ici,
00:24:29 :peut-être l'email. Et puis l'email, exemple, Thierry.example.com. Et puis, on pourrait imaginerl'âge. Alors, bien sûr, j'ai 20 ans, toujours, etc. Et ici, je veux valider ces données. Donc,
00:24:56 :je pourrais, ici, avoir, par exemple, required data. Et puis, on peut vouloir s'assurer quetous les dictionnaires qu'on reçoit, que les dictionnaires qu'on reçoit possèdent le nom,l'email et l'âge. Donc ici, je peux créer un ensemble, ici, qui dit que email, name, email,
00:25:20 :age, sont des données requises. Alors, vous pouvez très bien faire un test facilement. Vouspouvez tester. Required data est un sous-ensemble, par exemple, de data.keys. Donc, vous utilisez
00:25:38 :une opération ensembliste qui dit que toutes ces clés-là se trouvent dans le dictionnaire. Donc,là, trop. OK. S'il me manque l'âge, par exemple, donc, s'il me manque une, cette opération-là va
00:25:58 :me dire que c'est faux. Effectivement, cet ensemble-là n'est pas un sous-ensemble des clésdu dictionnaire qui manque ici. Je pourrais même avoir autre chose ici. Alors, l'âge, on a dit,
00:26:14 :l'adresse, par exemple. L'adresse, effectivement, l'adresse n'est pas une donnée obligatoire. Parcontre, l'âge est obligatoire. Et là, il me détecte très rapidement que j'ai bien le nom,
00:26:29 :l'email, mais je n'ai pas l'âge. Enfin, il m'en manque. Si je veux savoir lequel il me manque,c'est très simple. Il me suffit de faire une différence. Donc, lequel il me manque?
00:26:43 :data.keys-required. Lequel il me manque? Ça va me donner celui qui est en trop. Alors,ceux qu'on a en commun. Bon, allons rapidement sur ceux qu'on a en commun. En commun, donc,
00:27:12 :ça va être l'intersection, pour le coup. Ici, donc ici, l'intersection ici, ça va être name etemail. Donc, l'intersection required data. Donc, il voit qu'on a effectivement celui-là. Et si,
00:27:33 :finalement, je veux voir, je veux voir lequel il me manque. Alors, il y a probablement plus simpleà faire. Required data moins l'intersection. Et puis, il voit que celui qui me manque, c'est H.
00:27:48 :Donc, je peux faire très rapidement un diagnostic sur celui qui me manque. Et ici, j'ai mis ça àdosage du plan notebook. Donc, vous pouvez très bien faire une condition ici. Donc, si c'est en
00:28:02 :sous-ensemble. OK. OK. Toutes les données sont présentes. Données, elles sont présentes. Sinon,sinon, il manque quelque chose. Sinon, health, il manque print, il manque. Et puis là, voyons,
00:28:31 :on va faire des choses simples. Il manque H. Si j'ajoute H à mon dictionnaire. Et que j'exécutetout mon code. Sans oublier les virgules dans le dictionnaire. Il va bien sûr me valider que
00:29:00 :toutes les données sont présentes. Donc, vous voyez qu'on peut imaginer pas mal de choses entreles clés dans le dictionnaire et les valeurs d'un ensemble. On peut imaginer plein d'applications
00:29:15 :où ça devient intéressant. Et la pierre angulaire derrière, c'est la méthode Keys. La méthode Keystransforme un dictionnaire en un ensemble constitué des clés du dictionnaire. Donc ça, c'est la plus
00:29:34 :forte similarité entre le dictionnaire et l'ensemble. De point de vue mécanistique maintenant, si ons'intéresse à comment fonctionne un ensemble, tout ce qui vous a été dit la semaine dernière sur lehachage est vrai également pour les ensembles. Donc, il y a le hachage là-dedans. Par exemple,
00:29:58 :si vous créez une classe qui n'est pas hachable. Par exemple, créer une classe personne avec un nomet un âge. Par exemple, âge. Donc ça, typiquement, il n'y a aucune raison de rendre ça hachable.
00:30:17 :Éventuellement, j'ajoute une méthode de comparaison ici, où on va comparer l'objet avec un autre.Voilà, donc on va simplement, je ne veux justement pas ajouter le hachage ici. Donc ici, j'ai un objet
00:30:39 :qui n'est pas hachable. Et donc, si je crée une personne qui serait Thierry, qui a toujours 20 ans,et Evelyne, qui est une personne qui s'appelle Thierry II, qui s'appelle aussi Thierry, mais qui a 47 ans.
00:31:00 :De manière évidente, ça semble être deux personnes différentes. Toutefois, je ne peux pas les mettredans un ensemble. Ici, si je mets Thierry et Thierry II, Thierry et Thierry II, toutes les personnes ne sont
00:31:15 :pas hachables. Donc, un hachable type. Donc, vous ne pouvez pas utiliser dans un ensemble n'importe quellevaleur. De la même manière que vous ne pouvez pas utiliser ça dans un dictionnaire. Donc, si j'utilise
00:31:28 :Thierry et que je donne une valeur, et puis Thierry II, et que je donne une autre valeur Thierry II dans undictionnaire, je ne peux pas utiliser ces clés dans un dictionnaire parce qu'elles ne sont pas hachables.
00:31:43 :Alors, qu'est-ce que veut dire hachable ? Vous avez vu ça mardi dernier. Hachable, c'est donc le fait qu'enplus de pouvoir tester l'égalité entre deux objets, c'est-à-dire qu'ici, je dois pouvoir d'abord avoir uneméthode X qui me permet de tester si deux objets sont égaux entre eux, ce qui n'est pas le cas ici parce qu'ils
00:32:05 :sont vraiment différents. Ici, par exemple, si je prenais Thierry avec 20 ans, je devrais effectivement avoirune égalité. Donc là, j'ai une égalité. Et si deux objets sont égaux, je voudrais pouvoir utiliser la fonction
00:32:20 :H pour pouvoir utiliser tous ces objets dans des clés de dictionnaire et des ensembles. Donc ici, Thierry, je voudraisvouloir l'utiliser dans le dictionnaire. Donc, un des trucs, c'est d'implémenter une méthode, ici, H. Donc, techniquement,
00:32:50 :on va le faire souvent comme ça. Il y a une petite utilité ici. Un objet hachable est un objet qui doit posséderobligatoirement ces deux méthodes, HEC et HACH, mais ça ne suffit pas. Quelle autre condition je dois avoir ?
00:33:13 :Pour qu'un objet puisse être une clé dans un dictionnaire ou être membre d'un ensemble, l'objet doit être hachable.Donc, les conditions, ce qui est ces deux méthodes qui sont disponibles, et je vous réfère au mentorat de la semaine dernière,mais quelle troisième condition est nécessaire pour que j'ai le droit de faire ça ?
00:33:36 :L'objet doit être immutable. Donc ici, même si j'implémente cette méthode HACH, techniquement, j'aurai pas le droit quand même d'utilisercette personne comme en dictionnaire, par exemple, parce que le nom, j'ai aucune raison de modifier le nom, mais l'âge,une fois par année au minimum, je vais modifier l'âge. Et donc, si j'ai une personne dans un dictionnaire et que je modifie son âge,
00:34:18 :ça va modifier sa valeur de hachage. Et ça, Python l'interdit. C'est-à-dire qu'une fois qu'on a ajouté un objet en clé de dictionnaire,la valeur de hachage ne doit pas changer. Pour qu'elle ne change pas, il faut que l'objet soit immutable.
00:34:35 :Ici, on peut assez facilement rendre cet objet, conceptuellement en tout cas, immutable. Plutôt que d'ajouter l'âge, je peux ajouter la date de naissance.Par exemple, date de naissance, elle ne va pas changer. La personne sera toujours née au même moment. Donc, ici, date de naissance.
00:35:02 :Donc, ici, cette date de naissance ne va pas changer. Donc, l'objet devient immutable. Pour le coup, je vais juste remplacer.On va dire, dans notre définition d'égalité, si deux personnes ont le même nom et la même date de naissance, c'est la même personne.
00:35:19 :On peut encore discuter si c'est intelligent de faire ça. Mais également, je peux mettre la date de naissance ici dans le tuple de hachage.Et dans ce cas-là, techniquement, si je veux m'assurer qu'on ne modifie pas nom, du coup, et date de naissance, je peux également rendre ces noms privés.
00:35:39 :Ça, ce serait l'idée. Normalement, assurez-vous que vous rendez nom et date de naissance privés. Et ensuite, vous êtes assuré d'un objet immutable.Donc, faisons le petit travail que ça implique. Ici, nom. Ici, également, nom, nom, date de naissance, date de naissance.
00:36:04 :Vous rendez tout ça immutable. De nouveau, par convention. Et puis, si vous pouvez également.Ensuite, ajoutez une méthode nom qui va retourner return self.nom. Vous transformez ça dans une propriété.
00:36:38 :Alors, je vais le faire pour la date de naissance uniquement. Et puis, l'âge, vous pourriez le calculer à partir de la date du jour.Alors, ici, property. Et puis, du coup, c'est le date de naissance. Alors, là, j'ai quelque chose d'immutable, maintenant, qui est hachable.
00:38:11 :Alors, il faudrait que, simplement, je remporte ici, maintenant, from date time, import date, et puis ici, plutôt qu'en âge, je vais plutôt aller mettre une date, ici, par exemple, 1977 à la 04-09,vous vous en souviendrez le cas échéant, 04-09, bien sûr. Et, donc, deux personnes qui ont la même date de naissance sont considérées, ici, comme la même personne.
00:41:40 :Cool, je vois déjà des pouces qui se lèvent, donc ça devait être relativement clair pour certains d'entre vous.Arrêtez la présentation.Voilà, donc, c'est des structures de données qui, si vous les comprenez bien, vous donnent vraiment tout un arsenal, alors, dans le cadre des questions les plus algorithmiques que vous pourrez trouver au dossa, c'est des structures de données qui permettent parfois d'arriver avec des solutions très simples à des problèmes perçus comme complexes.
00:43:15 :Voilà, donc, moi je vais...Ah oui.En fait, je cherchais l'équivalent des ensembles en anglais, c'est le mot qui...Alors, ici, t'as les sept S.E.T.
00:43:33 :Sept, ok.Si tu regardes par exemple la doc de Python que j'ai mentionnée, cette fois on va la repasser en anglais, ok.Pourquoi est-ce qu'il refuse de...
00:43:46 :Ah, il va juste aller là.Voilà, c'est un but ex-standard, si on le repasse en anglais, pour le coup, par défaut, et tu vois là que le type, c'est S.E.T. et P.R.O.S.E.N.T. S.E.T.
00:43:57 :S.E.T. type.C'est ce qui va être, donc S.E.T. se traduit par ensemble en français.Mais en Python, pour créer en S.E.T. justement, tu auras la possibilité d'utiliser les accolades, comme pour les dictionnaires.
00:44:16 :Ok, donc un, deux, trois, là c'est en S.E.T.Parce que c'est comme le dictionnaire, mais simplement il n'y a pas de valeur, il n'y a pas les deux, il n'y a pas de valeur.
00:44:26 :Donc c'est ce qui permet un S.E.T.Mais tu peux utiliser aussi un S.E.T. ici avec un, deux, trois, etc.Et non, si tu dis S.E.T., il faut une structure de données comme une liste ou un tuple, etc.
00:44:40 :Donc S.E.T. ici, et là, tu crées en S.E.T. le même, mais à partir d'une liste.Ok, et puis, ou à partir d'un tuple, pareil, un, deux, trois, ici, et puis je peux créer mon S.E.T.
00:44:56 :Donc le mot-clé à retenir, c'est S.E.T., c'est à côté de liste et à côté de dicte.Ok, ça c'est le mot-clé.Parfait, donc je vous souhaite une très belle soirée, et puis donnez-moi des nouvelles lorsque vous aurez appliqué les S.E.T.
00:45:22 :Voilà, pour ma part, c'était mon dernier Mentorat ici parmi vous, mais je serai toujours de passage sur le Discord à vous lire.Je ne parle pas beaucoup sur le Discord, mais je lis très souvent, donc on se croisera peut-être à nouveau,mais ce sera pour ma part la dernière fois que je donne un Mentorat ce soir. Voilà.
00:45:46 :Merci beaucoup.Ah bon, chéri, ça ce n'est pas une bonne nouvelle ça.Ah oui, c'est toujours, il y a parfois des objectifs dans la vie qui évoluent.
00:46:03 :J'ai une nouvelle responsabilité à mon boulot, et puis je suis en train de faire évoluer un petit peu mon propre business de Mentorat Python,et puis pour le coup, ça m'occupe un petit peu trop, et je n'arrive pas à être régulier dans les mercredis,donc je préfère faire les choses bien que de faire tout et pas forcément très bien.
Aucune occurrence trouvée pour « ».
00:00:00
Introduction aux dictionnaires et ensembles
00:02:00
Fonctionnement et avantages du hachage dans les dictionnaires
00:05:05
Présentation des ensembles et recherche en temps constant
00:11:09
Opérations ensemblistes : intersection, union et différence
00:17:03
Fusion de dictionnaires et gestion des clés conflictuelles
00:24:06
Validation des données via les ensembles
00:29:50
Hashabilité et immutabilité : contraintes et conception d’objets
00:41:26
Conclusion et recommandations sur l’utilisation des ensembles