# Les dictionnaires

## Qu'est ce qu'un dictionnaire ?

* Collection de clés et de valeurs associées
* Les clés sont uniques
* Est *mutable* -> on peut le modifier (clés et valeurs) après la création
* Est *iterable* -> on peut utiliser un `for .. in` pour parcourir le dictionnaire
* On accède à une valeur par sa clé et non par sa position \
  ex. `voiture["modele"]`

## Syntaxe d'un dictionnaire - déclaration

```python
# Sur une ligne avec accolades
voiture = { 'marque' : 'Toyota', 'modele' : 'MR2', 'annee' : 1996 }

# Ou sur plusieurs lignes avec accolades
voiture = { 
'marque' : 'Toyota', 
'modele' : 'MR2', 
'annee' : 1996 
}

# Avec dict() et des séquences
voiture = dict([('marque', 'Toyota'), ('modele', 'MR2'), ('annee', 1996)])

# Avec dict() quand les clés sont des chaînes de caractères
voiture = dict(marque='Toyota', modele='MR2', annee=1996)
```

## Ajouter un élément

La clé s'ajoute au dictionnaire lorsqu'on lui assigne une valeur

```python
# Déclaration
voiture = { 
'marque' : 'Toyota', 
'modele' : 'MR2', 
'annee' : 1996 
}

# Ajout d'une valeur
voiture['couleur'] = 'Bleu ciel'
```

## Manipulation (quelques méthodes)

* Parcourir :   `for cle, valeur in dict.items()`
* Supprimer une entrée dans le dictionnaire (paire clé/valeur) :  `del dict[cle]`
* Retourner toutes les clés dans l'ordre d'insertion : `list(dict)`
* Vérifier si une clé est dans le dictionnaire : `cle in list(dict)`
* Retourner toutes les valeurs du dictionnaire : `dict.values()`
* Retirer une clé du dictionnaire et retourner sa valeur : `dict.pop(cle)`
* Retirer et retourner la dernière paire clé, valeur du dictionnaire (utile pour vider progressivement un dictionnaire) : `dict.popitem()`
* Vider le dictionnaire : `dict.clear()`

## Ressources

* Tutoriel sur les dictionnaires dans la doc officielle de Python : <https://docs.python.org/3/tutorial/datastructures.html#dictionaries>
* Méthodes des dictionnaires dans la doc officielle : <https://docs.python.org/3/library/stdtypes.html#mapping-types-dict>
