Python: Dictionnaire

From Wiki Cours
Jump to: navigation, search

<--Sommaire

Initialisation

Un dictionnaire est un ensemble d'associations d'éléments clé:valeur où la clé sert d'index ou de mot-clé à laquelle est attribuée une valeur. Il correspond au mot-clé dict. Clé et valeur ne sont pas forcément numériques.

a = dict()
a = {}  # dictionnaire vide
telephones = { 'Julien':'0623459503', 'Julie':'0629534503', 'Juliette':'0603234595' }
print(a) # affiche la liste

# une autre manière d'initialiser un dictionnaire ayant des clés littérales, sans avoir besoin de mettre des guillements pour les strings
dico = dict(L=2, N=3)
print(dico)

Les dictionnaires assurent une recherche très rapide des éléments.

Il est possible d'utiliser pour les clés tout type 'non-modifiable': int, str, flot, complex, tuple

Adressage des éléments

Les dictionnaires ne sont pas des séquences où les éléments sont organisés de façon ordonnée et auxquels on peut attribuer un indice. En revanche, on accède aux valeurs à l'aide de l'opérateur d'indiçage [] avec comme argument la clé, selon la structure dico[clé] = valeur pour une affectation. Lorsqu'on affecte une valeur à une clé qui n'existe pas encore, un nouveau couple clé:valeur est créé, pas forcément à la fin du dictionnaire:

telephones = { 'Julien':'0623459503', 'Julie':'0629534503', 'Juliette':'0603234595' }
telephones['Julianne'] = '0623450395'
print(telephones)

Fonctions propres aux dictionnaires

On accède aux listes des clés et des valeurs à l'aide des fonctions keys() et values() :

telephones = { 'Julien':'0623459503', 'Julie':'0629534503', 'Juliette':'0603234595' }
prenoms = list(telephones.keys())  # pas besoin de conversion en list pour Python 2
numeros = list(telephones.values())
print(prenoms)
print(numeros)

La méthode items() retourne les éléments du dictionnaires sous une forme convertible en une liste de tuple.

print(list(telephones.items()))

Le mot-clé in permet de tester l'existence d'une clé dans le dictionnaire.

print('Juliette' in telephones, 'Marie' in telephones)

Le mot-clé del permet de supprimer un élément, le couple clé:valeur est alors supprimé.

del telephones['Julien']

Parcourir un dictionnaire

Il existe plusieurs façon de parcourir un dictionnaire suivant l'information que l'on veut en extraire.

On ne peut pas utiliser d'indiçage entier par construction.

for cle in dico:
    print(cle, dico[cle])

la fonction items() permet de parcourir directement les couples cle:valeurs

for cle,val in dico.items():
    print(cle, val)

Utilisation pour des choix multiples

Les structures conditionnelles if - elif - ... - else deviennent lourdes s'il y a beaucoup de cas possibles.

En Python, les dictionnaires offrent une solution élégante. Supposons qu'en fonction de notre 'etat' (par exemple dans un petit jeu), on doive faire certaines actions définies par des fonctions. En associations les états possibles à des fonctions dans un dictionnaire, on simplifie la structure:

def avancer():
    ...
def reculer():
    ...
def eviter():
    ...
def seretourner():
    ...

actions = { 'aubout':seretourner, 'enroute':avancer, 'obstacle':eviter, 'danger':reculer }

actions[etat]() # avec etat = 'aubout', ...
                # lance la fonction associée à la clé correspondante à la variable etat

Notez que dans le dictionnaire, les valeurs sont les noms de fonctions 'sans parenthèses' tandis que les parenthèses sont présentes dans la dernière ligne. La présence des parenthèses lance l'appel de la fonction, ce que l'on ne veut pas lors de la création du dictionnaire.

Une fois le dictionnaire créer, il est toujours possible de rajouter un couple etat:action qui n'existait pas initialement. Ceci est impossible avec les structures conditionnelles.