pythonListSelfTest1
Python : Les dictionnaires (2)

Rappelez-vous qu'un dictionnaire s'apparentes à une liste, mais contrairement à celle-ci où les informations sont mémorisées dans un ordre précis, un dictionnaire associe chaque objet contenu à une clé (généralement une chaîne de caractères). L'idée est de donnée un "nom" à une valeur, c'est d'ailleurs pour cela que l'on parle aussi de p-uplets nommés.

RAPPEL (partie 1)

Considérons des immatriculations de véhicules:

immatriculationPropriétaire
DE258FRDurand
RU149KPDupont
JN368TRGaspard
FT347LOPirrot

Ici la clé correspond au numéro d'immatriculation du véhicule et la valeur au nom du propriétaire.

Utilisation des dictionnaires.

Création d'un dictionnaire

d1 = dict()  # Création d'un dictionnaire vide
d2 = {}      # Création d'un dictionnaire vide (variante de la méthode précédente)

# Création d'un dictionnaire avec couples clé:valeur
immat = { "DE-258-FR":"Durand" , "RU-149-KP":"Dupont" ,"JN-368-TR":"Gaspard" , "FT-347-LO":"Pirrot" }

Un dictionnaire est défini entre accolades {}. C'est une suite de couple clé : valeur.

Remarque : Les parenthèses () délimitent les tuples, les crochets [] délimitent les listes et les accolades {} délimitent les dictionnaires.

Ajout d'un élément

# Ajout d'un couple clé:valeur dans le dictionnaire.
immat['AL-160-PK']="LUPIN"

Si la clé n’existe pas, le couple (clé,valeur) spécifié est ajouté au dictionnaire.
Si la clé existait déjà, l’ancienne valeur associée à cette clé est remplacée par la nouvelle.

En effet, un dictionnaire ne peut pas contenir deux clés identiques. En revanche on peut avoir plusieurs couples (clé,valeur) avec la même valeur (voir ci-dessous)

# Ici l'utilisateur LUPIN possède 2 voitures.
immat['AL-160-PK']="LUPIN"
immat['DE-258-FR']="LUPIN"

Accéder aux éléments du dictionnaire

On accède à la valeur correspondant à une clé de la manière suivante :

>>> Immat["DE-258-FR"]
'Durand'
Immat["AG-523-PL"]
KeyError: 'AG-523-PL'    # Attention : génère une erreur si la clé n'existe pas !

On peut aussi utiliser la méthode get()

>>> Immat.get("DE-258-FR")
'Durand'
>>> Immat.get("AG-523-PL")
                                     # renvoie None si pas de correspondance

On voit sur ce dernier exemple, que si la clé n'existe pas la méthode get() ne génère pas d'erreur mais renvoie la valeur None.

Tester la présence d'une clé.

>>> if "AL-160-PK" in immat.keys():
...     print("Ce véhicule existe bien.")
... 
Ce véhicule existe bien.
>>>

Tester la présence d'une valeur.

>>> if "Dupont" in immat.values():
...     print("Ce propriétaire existe bien.")
... 
Ce propriétaire existe bien.
>>>

Connaître le nombre de couple (clé,valeur)

len(immat)

Utilisation de clé composée (tuple)

Les clés d'un dictionnaire peuvent également être des clés composées de type tuple. Prenons l'exemple du jeu d'échec où la position des pièces est repérée par leur coordonnées. Ci-dessous Il y a un cavalier blanc en (b,1).

chess

L'utilisation d'un dictionnaire Python permet de très naturellement implémenter un tel exemple :

echiquier = {}
echiquier['a', 1] = "tour blanche" # En bas à gauche de l'échiquier
echiquier['b', 1] = "cavalier blanc" # À droite de la tour
echiquier['c', 1] = "fou blanc" # À droite du cavalier
echiquier['d', 1] = "reine blanche" # À droite du fou
# ... Première ligne des blancs
echiquier['a', 2] = "pion blanc" # Devant la tour
echiquier['b', 2] = "pion blanc" # Devant le cavalier, à droite du pion
# ... Seconde ligne des blancs

Supprimer des clés.

Comme pour les listes nous avons :

immat = { "DE-258-FR":"Durand" , "RU-149-KP":"Dupont" ,"JN-368-TR":"Gaspard" , "FT-347-LO":"Pirrot" }
del immat["RU-149-KP"]

Les méthodes de parcours.

Parcours des clés

>>> for num in immat.keys():
...     print(num)
...     
... 
DE-258-FR
RU-149-KP
JN-368-TR
FT-347-LO

>>> 

Vous pouvez remarquer que dans un dictionnaire les clés ne sont pas ordonnées.

Parcours des valeurs.

>>> for nom in immat.values():
...     print(nom)
...     
... 
Durand
Dupont
Gaspard
Pirrot

>>> 

Parcours simultané des couples (clé,valeur).

Pour cela on utilise la méthode items. Elle renvoie une liste, contenant les couples (clé : valeur), sous la forme d'un tuple. Voyons comment l'utiliser :

>>> for (num,nom) in immat.items():
...     print(num,nom)
...     
... 
DE-258-FR Durand
RU-149-KP Dupont
JN-368-TR Gaspard
FT-347-LO Pirrot
>>> 

Compter les caractères d'un texte.

On utilise souvent un dictionnaire pour compter les lettres d’un texte :

texte = "exemple de texte"
d = { }
for c in texte :
    d[c] = d.get(c,0) + 1
{'t': 2, 'l': 1, 'e': 6, ' ': 2, 'x': 2, 'm': 1, 'd': 1, 'p': 1}

ordonner les éléments d’un dictionnaire

Les éléments d’un dictionnaire ne sont pas ordonnées ou tout du moins ne le sont pas d’une façon prédictible. Pour les parcourir dans un ordre précis, il faut utiliser une liste puis les ordonner. L’exemple suivant montre comment ordonner les éléments par ordre croissant de valeur, puis par ordre alphabétique en cas d’ex aeco.

d = { s:len(s) for s in ['un', 'deux', 'trois', 'quatre', 'cinq'] }
{'cinq': 4, 'deux': 4, 'quatre': 6, 'trois': 5, 'un': 2}
ordonne = [ (v,k) for k,v in d.items()]
[(4, 'cinq'), (5, 'trois'), (4, 'deux'), (6, 'quatre'), (2, 'un')]
ordonne.sort()
[(2, 'un'), (4, 'cinq'), (4, 'deux'), (5, 'trois'), (6, 'quatre')]

Quelques remarques :

Un dictionnaire est un type de données extrêmement puissant et pratique.

on peut se servir des dictionnaires pour compter par exemple la fréquences des caractères, des mots ou de couples de mots dans un texte. On les ordonne ensuite par fréquences décroissantes pour obtenir les mots ou caractères les plus fréquents.

Le dictionnaire se rapproche des listes sur certains points, mais sur beaucoup d’autres, il en diffère totalement.

La liste

Le dictionnaire

  • Suite d'objets.
  • Pour accéder aux objets, on utilise les clés.
  • Les parenthèses () délimitent les tuples, les crochets [] délimitent les listes et les accolades {} délimitent les dictionnaires.



    CCBYNCSA"(source openclassrooms (Les dictionnaires Python))

    Auteur : Vincent Le Goff (Modifié C. Béasse - Avril 2019)