{ "cells": [ { "cell_type": "markdown", "metadata": { "nbgrader": { "checksum": "5bd8485ad06f7ec05172022d6171b40a", "grade": false, "grade_id": "cell-40cc89ac5d71597a", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "# Les dictionnaires\n", "\n", "> les dictionnaires en python\n", "\n", "- toc: true\n", "- badges: true\n", "- comments: false\n", "- categories: [python, ISN]" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "723d20ab0f352337fdb98be8372ff234", "grade": false, "grade_id": "cell-f8fc6f5f138e704b", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Les dictionnaires sont des objets pouvant en contenir d'autres, un peu comme des listes.\n", "\n", "Cependant, au lieu d'héberger des informations dans un ordre précis, ils associent chaque ***valeur*** contenue à une ***clé*** (qui peut être une chaîne de caractère ou simplement un nombre).\n", "\n", "Voyons tout de suite un exemple :" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "6c583a0bbd711b2e53098b040eca8c09", "grade": false, "grade_id": "cell-1218eb027463d8ec", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS={\"ISN\":2,\"Maths\":7}" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "d26a0b44f6762cf0a80d210d8ff41fde", "grade": false, "grade_id": "cell-a35e53935e50a9f2", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Dans l'exemple ci-dessus, nous avons créé un dictionnaire ***coeffBacS***. Nous voyons tout de suite que :\n", "- le caractère servant à délimiter le dictionnaire est l'accolade { }, ce qui le distingue des listes délimitées par des crochets.\n", "- Il contient deux valeurs : 2 et 7\n", "- Il contient deux clés : \"ISN\" et \"Maths\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "b4b69e15da58b7a047403ce6d1ed2f8f", "grade": false, "grade_id": "cell-6925f6afb0e37c78", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## Accéder à une valeur du dictionnaire" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "236b481ea370e34aad0e80b251a47015", "grade": false, "grade_id": "cell-baadf7f0a0abd933", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Contrairement aux listes ou on accède aux valeurs par la position dans la liste, on accède aux valeurs du dictionnaire par l'intermédiaire des ***clés***. Regardez l'exemple ci-dessous :" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "e693112d83c08b36d0cebf5b60ce88be", "grade": false, "grade_id": "cell-b7c4d015316542ad", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS[\"ISN\"]" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "4a5d6f7dcf04a79f36e2a62abb589275", "grade": false, "grade_id": "cell-4822f20b06d21ca1", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "La ressemblance avec les listes pour accéder aux données est assez frappante.\n", "\n", "**Attention** à bien utiliser une clé qui a été définie, sinon..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "27efa44421a82bb8687488b3b7f7dafe", "grade": false, "grade_id": "cell-bb0b4a8428e483e7", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS[\"MATHS\"]" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "44316d065b85c65b6f66761dc95ee361", "grade": false, "grade_id": "cell-b37d7c43ecbba34f", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Ici la clé ***MATHS*** n'existe pas. En effet le système est sensible aux majuscules !" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "1dd2515c65f06a3e37f9f7d2ccbb4d6e", "grade": false, "grade_id": "cell-dba6aa49b2967bb3", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## Savoir si une clé existe dans un dictionnaire" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "17724293d038b848936f8ede7ddf7cf2", "grade": false, "grade_id": "cell-7e6967f71e981db8", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Pour éviter ce type d'erreur, on peut tester l'existance d'une clé par le mot clé Python ***in***" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "a177519cd5050f164dd156a2f6d3181d", "grade": false, "grade_id": "cell-493361cf5abf64ae", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "\"MATHS\" in coeffBacS" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "5801dcd4e99af45f1043d77342184d60", "grade": false, "grade_id": "cell-a93ca00d83056d33", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "\"ISN\" in coeffBacS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ajouter des données à un dictionnaire" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "e21cbf97e8d7bd893bf3b385a051d7d6", "grade": false, "grade_id": "cell-e743a6802d843e6d", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "L'ajout de données se fait très simplement :" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "577d09f7149301b60d62c289171b52d1", "grade": false, "grade_id": "cell-6db173c898678eca", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS[\"Philo\"]=3" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "f95b4e741fce3ac7c95d8808a57cff5a", "grade": false, "grade_id": "cell-5c534bab37a6ba7e", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Les clés peuvent être de type différents, ainsi que les données :" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "4abd7b514db6aeed46899389bc96886a", "grade": false, "grade_id": "cell-a79d9462df0834e0", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS[\"Philo\"]" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "6a2e0a8b1509f52b5d9298518848277b", "grade": false, "grade_id": "cell-3c109d0bc5fa7162", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "**Remarque** : les clés ne sont pas nécessairement du type chaîne de caractère. Tout type *non mutable* peut servir de clé. On peut très bien utiliser un nombre comme clé :" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "d3025dcf2102c77985aab7082a43fe44", "grade": false, "grade_id": "cell-5c50eb013a105f34", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "# on crée un dictionnaire vide\n", "autreDico=dict()\n", "# on définit des clés sous forme de nombres\n", "autreDico[3.14] = \"pi\"\n", "autreDico[2.718] = \"e\"\n", "# il est possible de mélanger les types de clés\n", "# mais ce n'est pas forcément une bonne idée !\n", "autreDico[\"pi\"] = 3.1415" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "bf74c5da946ee3f650751deefc66371f", "grade": false, "grade_id": "cell-572921786191e5d5", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "autreDico[3.14]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "0536378b6b52fdfff1cd933adb4fdc40", "grade": false, "grade_id": "cell-ef4f9042550bb944", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "autreDico[\"pi\"]" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "907cdc8bc1817dda9cff3c48a5c7bc15", "grade": false, "grade_id": "cell-6fdbe9c5bb73f990", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## Parcourir un dictionnaire" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "9564021956c2a49e9070adceeaba7419", "grade": false, "grade_id": "cell-feaf6d2058fef959", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Pour parcourir un dictiionnaire, on va utiliser les méthodes\n", "- ***keys()*** pour récupérer la liste des clés\n", "- ***values()*** pour récupérer la liste des valeurs\n", "\n", "Par exemple, affichons toutes les valeurs contenues dans notre dictionnaire" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "473f068a257e506e9c49f75617e99750", "grade": false, "grade_id": "cell-b7f6e2dc474d99ef", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS.values()" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "daa4d047aa1c116c2ac8e212db5d541f", "grade": false, "grade_id": "cell-2bd69e1d56d8d1c1", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "et de même pour les clés :" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "f00e4c973af4cd7cde55bf2fc9b07dd3", "grade": false, "grade_id": "cell-db537c8f3af6862b", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS.keys()" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "3a404a93d6a18720c07a1294e1f62661", "grade": false, "grade_id": "cell-dcbdff480c4f9068", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Pour parcourir un dictionnaire par clés, il suffit de faire une boucle du type :\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "ef2f419e4e779e5367d12dd1426a8f2f", "grade": false, "grade_id": "cell-b9be1fd8caf1f806", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "for matiere in coeffBacS.keys():\n", " print(matiere , \" coeff \", coeffBacS[matiere])" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "60f984068f8ac70c849157fb4cf5e39a", "grade": false, "grade_id": "cell-32a525c3ac194fb7", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Complétons notre dictionnaire ...." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "c63ff546b3654e1ae32d34a378aaea57", "grade": false, "grade_id": "cell-b59a501d30d507ee", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS[\"Francais Oral\"]=2\n", "coeffBacS[\"Physique Chimie\"]=6\n", "coeffBacS[\"SVT\"]=6\n", "coeffBacS[\"HGéo\"]=3\n", "coeffBacS[\"LV1\"]=3\n", "coeffBacS[\"TPE\"]=2" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "a041bbae17126b463d2b4cb1208280ff", "grade": false, "grade_id": "cell-f3e87c8bc83fb48c", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## Supprimer une clé\n", "\n", "On peut supprimer une clé (et sa valeur correspondante) d'un dictionnaire en utilisant, au choix, la méthode **del** ou la méthode **pop**." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "6b603249a1201652b95f475f5cc37f44", "grade": false, "grade_id": "cell-5d4bcb14394a27f7", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS.pop(\"Physique Chimie\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "a8fc9c0bbe92bcd2d54f06b0d5df2b13", "grade": false, "grade_id": "cell-118dcc2fcaf6758c", "locked": true, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "coeffBacS[\"Physique Chimie\"]" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "a022345b896321fb3b426cd55d84bf14", "grade": false, "grade_id": "cell-39c857bfce904820", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "# A vous de jouer..." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "85290058e9418e87fb6fb4e40783a67e", "grade": false, "grade_id": "cell-e15c671059f6e16b", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Ecrire une fonction **bacS** prenant en paramètre un dictionnaire dont les valeurs sont les coefficients et qui renvoie la somme des coefficients des matières du bac." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "nbgrader": { "checksum": "a43f58641a4dbbdb4a9dbc992e33026f", "grade": false, "grade_id": "cell-11952dc498a3edf2", "locked": false, "schema_version": 1, "solution": true } }, "outputs": [], "source": [ "def bacS(dico):\n", " # YOUR CODE HERE\n", " raise NotImplementedError()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "a87ba538c24347d9d94d4c84548d689e", "grade": true, "grade_id": "cell-93a50ab1d85f2564", "locked": true, "points": 1, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "dicoTest = coeffBacS={\"ISN\":2,\"Maths\":7, \"Francais Oral\":2, \"Physique Chimie\":6, \"SVT\":6, \"HGéo\":3, \"LV1\":3, \"TPE\":2}\n", "\n", "assert bacS(dicoTest) == 31" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "30c71dd58c532755bcca998bedeebbd3", "grade": false, "grade_id": "cell-5b9ee440c83edf30", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "## Exercice" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "5cdac2e5bd5658e453eca9030d67a5d0", "grade": false, "grade_id": "cell-9dfaab0141a60364", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Ecrire une fonction **dicoCarres** prenant en paramètre un entier $n$ et renvoyant un dictionnaire dont les clés sont les entiers de 1 à $n$ et les valeurs sont les carrés de ces nombres" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "nbgrader": { "checksum": "574020298b49b9e6860ba57fce920680", "grade": false, "grade_id": "cell-aebcdceeedf69011", "locked": false, "schema_version": 1, "solution": true } }, "outputs": [], "source": [ "def dicoCarres(n):\n", " # YOUR CODE HERE\n", " raise NotImplementedError()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "a11b8cd4204a58406c5c8770b724ad39", "grade": true, "grade_id": "cell-501f55a1c18aaa0b", "locked": true, "points": 1, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "d = dicoCarres(10)\n", "assert d[5] == 25" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "f4bdd80c47abfb8a1ca415c4aa348450", "grade": false, "grade_id": "cell-54de786712973be9", "locked": true, "schema_version": 1, "solution": false } }, "source": [ "Ecrire une fonction **inverseDico** prenant en paramètre un dicitonnaire ***d*** et renvoyant un dictionnaire dont les clés sont les valeurs de ***d*** et les valeurs sont les clés correspondantes.\n", "\n", "On supposera que les clés et les valeurs sont uniques (comme dans notre dictionnaire des carrés) pour simplifier la tâche." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "nbgrader": { "checksum": "168085246814d7f05a4ae884d2f966c2", "grade": false, "grade_id": "cell-6c442afaeb45b0e8", "locked": false, "schema_version": 1, "solution": true } }, "outputs": [], "source": [ "def inverseDico(d):\n", " # YOUR CODE HERE\n", " raise NotImplementedError()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "checksum": "3b734b18084afd3d26880a0d1ce30565", "grade": true, "grade_id": "cell-efe08a94ef08abb6", "locked": true, "points": 1, "schema_version": 1, "solution": false } }, "outputs": [], "source": [ "d = dicoCarres(10)\n", "i = inverseDico(d)\n", "assert i[64] == 8" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Edit Metadata", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 1 }