{"cells":[{"metadata":{},"cell_type":"markdown","source":"

Les Types Construits - Les Dictionnaires

\n"},{"metadata":{},"cell_type":"markdown","source":"

Définition :

\n

Un dictionnaire est une structure associative qui fait correspondre des clés et des valeurs.

\n

Par exemple : \n

\n

\n

Le dictionnaire est un type de données qui se rapproche des listes, mais, contrairement aux listes, n’a pas une structure ordonné en séquences ( pas d'indices) .

\n

Un dictionnaire est composé de clés auxquelles sont associées une valeur.
d = {'cle1':valeur1, 'cle2':valeur2,....}

\n

Les clés peuvent être des chaines de caractères ou des nombres ( des objets de type non mutables )

\n

Les valeurs peuvent être de tout type ( même des dictionnaires!)

"},{"metadata":{},"cell_type":"markdown","source":"

1. Créer un dictionnaire - Ajouter des couples clés-valeur dans un dictionnaire

\n\n

Le dictionnaire se crée à l’aide d’accolade ( contrairement aux listes créées avec des crochets et les tuples avec des parenthèses ).

\n

Plusieurs méthodes permettent de créer :

\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"d1 = {} # Création d'un dictionnaire vide\nd2 = dict() # Création d'un dictionnaire vide (autre méthode)\nd3 = {'poires': 5, 'bananes': 7, 'abricots' : 12} # création d'un dictionnaire par extension\nd4 = {k: k**2 for k in range(1, 10)} # création d'un dictionnaire par compréhension\nprint(type(d1))\nprint(\"d1 =>\", d1)\nprint(\"d2 =>\", d2)\nprint(\"d3 =>\", d3)\nprint(\"d4 =>\", d4)\n\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

Pour ajouter une clé, on la nomme entre guillemets, le tout entre crochet. \nOn lui affecte sa valeur à l’aide du signe égal. "},{"metadata":{"trusted":false},"cell_type":"code","source":"JB={} # création d'un dictionnaire vide\nJB[\"Nom\"]=\"Bond\" # on crée une clé=\"Nom\" avec la valeur :\"Bond\"\nJB[\"Prénom\"]=\"James\" \nJB[\"acteurs\"]=(\"Connery\",\"Moore\",\"Brosnan\",\"Craig\") # on crée une clé acteurs avec come valeur un tuple \nJB[\"année\"]=1953\nprint(JB) ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

On peut aussi créer directement un dictionnaire sans passer par un dictionnaire vide

"},{"metadata":{"trusted":false},"cell_type":"code","source":"joueur={\"Nom\":\"Maradona\",\"Prénom\":\"Diego\",\"Coupe du monde\":2}\nprint(joueur)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

On peut aussir créer un dictionnaire à partir d'une liste existante par la fonction dict(L) :

"},{"metadata":{"trusted":false},"cell_type":"code","source":"# soit une liste de tuples\nL=[(\"Carl\",21),(\"Sophie\",8),(\"Gabriel\",20),(\"Olivier\",12)]\nd5=dict(L)\nprint(d5)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# soit une liste de listes\nL=[[\"Marc\",[\"h\",22]],[\"Léa\",[\"f\",22]]]\nd6=dict(L)\nprint(d6)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

Comme pour une liste , on obtient le nombres de clé d'un dictionnaires par la fonction len

"},{"metadata":{"trusted":false},"cell_type":"code","source":"len(d5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"len(d6)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

Comme pour les listes aussi, on peut aussi interroger l'appartenance d'une clé avec à l'expression `in`.

"},{"metadata":{"trusted":false},"cell_type":"code","source":"\"Bob\" in d6","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
\n

Exercice 1

\n

Créer un dictionnaire Pays avec comme clé le nom du pays et comme valeur la Capitale

\n

le remplir d'au moins 3 clés, faire des tests d'appartenance

\n
"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

3. Obtenir une donnée d'un dictionnaire

"},{"metadata":{},"cell_type":"markdown","source":"

On récupére une donnée d'un dictionnaire par l'accès à sa clé et l'instruction :

\n

nom_du_dictionnaire[nom_de_clé]

"},{"metadata":{"trusted":false},"cell_type":"code","source":"#exemple1\nprint(d5[\"Sophie\"])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# exemple2 on affecte la valeur à une variable \nn=d5[\"Carl\"]\nprint(n)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

4. Modifier un dictionnaire

\n

c'est possible car les dictionnaires sont des objets mutables

"},{"metadata":{},"cell_type":"raw","source":"Pour ajouter une clé, il suffit de créer une nouvelle clé"},{"metadata":{"trusted":false},"cell_type":"code","source":"# on ajoute une nouvelle clé au dictionnaire \nprint(JB)\nJB[\"nb de films\"]=26\nprint(JB)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Pour modifier la valeur d'une clé, on procède comme une variable : "},{"metadata":{"trusted":false},"cell_type":"code","source":"# j'ai oublié des acteurs, on réecrit la clé :\nJB=(\"Connery\",\"Lazenby\",\"Moore\",\"Brosnan\",\"Dalton\",\"Craig\")\nprint(JB)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

Pour supprimer une clé, on utilise la fonction del ou la méthode pop si on veut conserver l'élement supprimé

"},{"metadata":{"trusted":false},"cell_type":"code","source":"# exemple avec del\ndel(d5[\"Carl\"])\nprint(d5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# exemple avec pop\nFruits = { \"pomme\": 2, 'orange': 3, 'raisin': 4 }\nelement = Fruits.pop(\"pomme\")\nprint(element)\nprint(Fruits)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

Enfin, pour copier un dictionnaire de façon indépendante, on utilise la méthode deepcopy à importer du module copy, sinon la modification d'un dictionnaire modifiera l'autre. Cette remarque s'applique aussi aux listes

"},{"metadata":{"trusted":false},"cell_type":"code","source":"import copy\nd1 = {'a':1}\nd2 = copy.deepcopy(d1)\n#d2=d1\nprint(d2)\nd1[\"b\"]=2\nprint(d1)\nprint(d2)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

5. Parcourir les élements d'un dictionaire

"},{"metadata":{},"cell_type":"markdown","source":"

Les itérateurs pour les dictionnaires

\n\nLes façons de parcourir un dictionnaire sont différentes selon ce que l'on veut récupérer du dictionnaire : \n\n
  • uniquement les clés
  • \n
  • uniquement les valeurs
  • \n
  • ou l'ensemble des paires clés-valeurs
  • \n"},{"metadata":{},"cell_type":"markdown","source":"

    Exemple : Un répertoire téléphonique interne peut être représenté par un dictionnaire.
    \nIl contient une série de paires prénom, numéro de téléphone.
    \nOn peut accéder au numéro en interrogeant sur le prénom.

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"rep = {'John':5234,'Paul':5345,'Steve':5186,'Betty':5678}","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    a) Si on veut recupérer uniquement les clés :

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"# soit tout simplement par : for cle in dictionnaire\nfor prenom in rep:\n print(prenom)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# soit par for clé in dictionnaire.keys()\nfor prenom in rep.keys():\n print(prenom)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"#exemple d'utilisation\nmessage = \"Hey \"\nfor prenom in rep.keys():\n message = message + prenom + ', '\nmessage += \"merci de me rappeler dès que possible !\"\nprint(message)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    b) si on veut récuperer les valeurs

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"# par for valeur in dictionnaires.values()\nfor num in rep.values():\n print(\"le numéro\",num, \" est déjà attribué\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    c) si on veut à la fois les clés et les valeurs

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"# par clé,valeurs in dictionnaires.items()\nfor prenom,num in rep.items():\n print(prenom, \"a le numéro :\", num)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    \n

    Exercice 2

    "},{"metadata":{},"cell_type":"markdown","source":"

    question a)

    \n
      \n
    1. Créer un dictionnaire Notes avec pour clé une matière et pour valeur une note.
    2. \n
    3. Entrer au moins 5 matières dont les Maths mais pas l'Espagnol.
    4. \n
    5. Afficher ce dictionnaire.
    6. \n
    7. Tester l'appartenance de Maths et Espagnol au dictionnaire.
    8. \n
    9. Afficher la note de Maths
    10. \n
    "},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    question b)

    \n

    afficher uniquement toutes les matieres de Notes

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    question c)

    Afficher les matières où la note est supérieure à 10

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"# 1ere version : on récupére les clés et on teste la valeur par sa clé\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# 2ème version on récupère les couples clés valeurs\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    question d)

    \n
  • modifier la note de maths
  • \n
  • ajouter la matière Espagnol avec une note de 14
  • \n
  • Afficher le dictionnaire Notes
  • \n

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"Notes[\"MATHS\"]=11\nNotes[\"Espagnol\"]=14\nprint(Notes)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    question e)

    \n

    calculer la moyenne des notes du dictionnaire

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"# 1ère version : on parcourt le dictionnaire par les valeurs\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# 2ème version : on parcourt le dictionnaires par les clés\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    \n

    Exercice 3

    \n
    "},{"metadata":{},"cell_type":"markdown","source":"

    Soit le dictionnaire suivant qui contient quelques montagnes celebres dans le monde :
    \nla clé est le nom et la valeur est un tuple (continent,altitude)

    "},{"metadata":{"trusted":false},"cell_type":"code","source":"Sommets={\"Kilimandjaro\":(\"Afrique\",5895),\"Mont Blanc\":(\"Europe\",4808),\"Mont Fuji\":(\"Asie\",3776),\"Everest\":(\"Asie\",8808),\"K2\":(\"Asie\",8611),\n \"Mont Cervin\":(\"Europe\",4478),\"Mont Olympe\":(\"Europe\",2917),\"Alpamayo\":(\"Amériques\",5947), \"Piton des neiges\":(\"Afrique\",3069)}\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"a) j'ai oublié de citer la plus haute montagne d'Islande qui est le Hvannadalshnjúkur d'une hauteur de 2011 m et le Mont Withney en Californie haut de 4421 m.\nRajouter ces 2 montagnes dans le dictionnaire et afficher alors le dictionnaire Sommets\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"b) quelle instruction permet d'obtenir l'altitude du Mont Blanc ?"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"c) Ecrire un code qui affiche tous les noms de montagnes du dictionnaire"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"d) Ecrire un code qui affiche tous les noms de montagnes dont le sommet est supérieur à 5000 m"},{"metadata":{"trusted":false},"cell_type":"code","source":"# 1ere version: parcours avec les cles(noms)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# 2ème version : parcours avec clé(noms), valeur (tuples:(continent, altitude))\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"e) Ecrire un code qui affiche tous les noms de montagnes dont le sommet est en Europe"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"f) Ecrire une fonction qui affiche les noms de montagne dont le sommet est supérieur à un nombre n\ncette fonction prend en paramètre un dictionnaire D organisé comme Sommets et un entier n"},{"metadata":{"trusted":false},"cell_type":"code","source":"\n ","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"# on appelle cette fonction avec notre dictionnaire Sommets\nmontagne_sup(Sommets,8000)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"g) Ecrire un code qui détermine et affiche la montagne dont le sommet est le plus haut"},{"metadata":{"trusted":false},"cell_type":"code","source":"\n \n ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    \n

    Exercice 4

    "},{"metadata":{},"cell_type":"markdown","source":"

    Creer un programme qui construit un dictionnaire Occurences qui va contenir le nombre d'apparition d'une lettre dans un texte donné.

    \n
    exemple:
    \n

    si texte est \"bonjour Bob\" alors Occurences est {\"b\":2,\"o\":3,\"n\":1,\"j\":1,\"u\":1,\"r\":1,\"B\":1}

    "},{"metadata":{},"cell_type":"raw","source":"idee de l'algorithme :\non créee un dictionnaire Occurrences vide\non parcourt le texte caractères par caractères\non teste si le caractère est dans le dictionnaire\n si c'est non on ajoute la clé c au dictionnaire avec valeur 1\n si c'est oui on ajoute 1 à la valeur\n\nalgo en pseudo code :\nOccurences <- {}\nPour c dans texte\n si c n'est pas dans Occurences\n Occurences[c] <- 1\n sinon\n Occurences [c] <- Occurences[c]+1\n fin si\nfin pour\nAfficher Occurences"},{"metadata":{"trusted":false},"cell_type":"code","source":"# y a plus qu'à coder avec le texte sur la cigale et la fourmi\ntexte=\"La cigale ayant chanté Tout l'été, Se trouva fort dépourvue Quand la bise fut venue. Pas un seul petit morceau De mouche ou de vermisseau.Elle alla crier famine\"\n\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"
    \n

    Exercice 5 :

    \n"},{"metadata":{},"cell_type":"markdown","source":"

    a) Ecrire un programme qui recense dans un dictionnaire tous les mots écrits dans un texte

    "},{"metadata":{},"cell_type":"raw","source":"idee de l'algorithme\non initialise une variable mot à \"\"\non parcourt le texte carcatère par caractère et construit le mot en ajoutant le caractère à mot\non s'arrete losqu'on ne rencontre plus de lettres ( c'est à dire un espace, une virgule,...)\nOn teste si le mot dans le dictionnaire(ou pas) en le créant (ou en augmentant sa valeur de 1)\non réinitialise la variable mot\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"texte=\"Le texte suivant est celui que l'on va utiliser.Ce texte c'est du n'importe quoi!n'est ce pas?\"\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"

    b) En déduire un programme qui va donner le (ou les ) mots les plus écrits dans un texte.

    "},{"metadata":{},"cell_type":"raw","source":"On va transformer le programme precedent en une fonction qui prend en entrée le texte et en sortie le dictionnaire\nOn cherche ensuite la valeur max des clés du tableau\nPuis on reparcourt le dictionnaire en affichant les clés dont la valeur est égale à valeur max"},{"metadata":{"trusted":false},"cell_type":"code","source":"\n\ntexte =\"Le texte suivant est celui que l'on va analyser,ce texte c'est du n'importe quoi.J'aurai du choisir un autre texte, n'est ce pas\"\n\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","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.9.7"}},"nbformat":4,"nbformat_minor":2}