Les dictionnaires Python

En python, un dictionnaire est une structure de données associant deux objets : une clé et sa valeur.

On peut se le représenter comme un tableau dont chaque ligne est identifiée par une clé :

Clé Valeur
Nicolas Première 1
Claire Première 2
Arnaud Première 3

Création d'un dictionnaire

Un dictionnaire est identifié en python par des accolades {}.

On peut créer un dictionnaire de plusieurs façon :

In [ ]:
# Création d'un dictionnaire vide de deux manière différente

dico = {} # avec les accolades 

dico = dict() # en utilisant le constructeur

On peut aussi créer un dictionnaire en passant directement les couples clé : valeur séparés par des virgules , :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print(dico)

Les clés et valeurs d'un dictionnaire peuvent être de types différents et complexes :

In [ ]:
dico = {1 : "Nicolas", "Claire " : 5, (1,3) : "tour blanche"}

print( dico )

Dans l'exemple ci-dessus la clé (1,3) est un couple de nombres (un tuple en python). Cela est pratique pour repérer des éléments dans une grille. Ici par exemple, le contenu de la case de coordonnées (1,3) est "tour blanche"

Manipuler les données

Une fois un dictionnaire créé, on peut afficher une valeur en utilisant la notation nom_du_dictionnaire[clé] :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print( dico["Claire"] )

Si une clé n'est pas encore créée, il suffit de l'attribuer :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print( dico )

# Ajout de la clé "François"
dico["François"] = "Première 4"

print( dico )

On peut de la même façon modifier une valeur :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print( dico )

# Modification de la valeur associée à "Nicolas"
dico["Nicolas"] = "Première 6"

print( dico )

On peut retirer un couple clé : valeur en utilisant pop(clé) :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print( dico )

# Suppression de l'entrée "Nicolas"
dico.pop("Nicolas")

print( dico )

La taille d'un dictionnaire, le nombre de couples clé : valeur, est donné à l'aide de len(dico) :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print( len(dico) )

On peut demander à Python si le dictionnaire comporte une entrée associée à une clé précise avec in:

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print( "Nicolas" in dico ) # y-a-t'il une clé valant "Nicolas" ? Oui

print( "Première 1" in dico ) # y-a-t'il une clé valant "Première 1" ? Non (c'est une valeur)

Parcourir un dictionnaire

L'ensemble des clés d'un dictionnaire est donné par nom_du_dictionnaire.keys(). Attention on obtient un objet particulier que l'on pourra ensuite convertir en liste.

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

cles = dico.keys()

print( cles )

liste_cles = list(cles)

print( liste_cles)

L'ensemble des valeurs d'un dictionnaire est donné par nom_du_dictionnaire.values().

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

valeurs = dico.values()

print( valeurs )

L'ensemble des couples clé, valeur d'un dictionnaire est donné par nom_du_dictionnaire.items().

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

couples = dico.items()

print( couples )

A l'aide de ces fonctions on peut parcourir un dictionnaire :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}


print( "Les clés :")
for cle in dico.keys() :
    print(">>", cle)
    
print( "\nLes valeurs :")
for valeur in dico.values() :
    print(">>", valeur)
    
      
print( "\nLes items :")
for couple in dico.items() :
    print(">>", couple)
     

On peut ainsi par exemple "renverser" un dictionnaire, c.a.d. échanger les clés et valeurs :

In [ ]:
dico = {"Nicolas": "Première 1", "Claire": "Première 2", "Arnaud": "Première 3"}

print(dico)

# on crée un nouveau dictionnaire à l'aide du contructeur dict
# on lui donne en argument une liste contenant les couples (valeur,cle) générés en parcourant les items de dico
dico_renverse = dict([(valeur,cle) for (cle,valeur) in dico.items()])

print(dico_renverse)

Cas particuliers

Dans certains cas, la valeur associée à une clé est un groupe d'objet (un tuple ou un tableau).

Dans ce cas on peut accéder au valeurs ainsi :

In [ ]:
# Création d'un dictionnaire avec des prénoms en clés et des triplets de notes en valeurs

dico = {"Nicolas" : (12, 15, 7), "Mylène" : (13, 16, 15)}

# On affiche les notes de Nicolas
print(dico["Nicolas"])

# On affiche la deuxième note de Mylène (d'indice 1 en commençant à compter à 0)
print(dico["Mylène"][1])