%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/10_ensembles\|← Ensembles]] | [[Code et Développement/Programmation/Lecture de Code - Python/12_fonctions\|Fonctions →]] |
> |:---|---:|
%% nav-fin %%
# Dictionnaires (dict)
Un dictionnaire associe des **clés** à des **valeurs**. Les clés sont uniques.
---
## Création
```python
d = {"nom": "Alice", "age": 20}
d = {} # dictionnaire vide
d = dict(nom="Alice", age=20) # syntaxe alternative
```
---
## Accès et modification
```python
d = {"a": 1, "b": 2}
d["a"] # vaut 1
d["c"] = 3 # ajoute la clé "c"
d["a"] = 99 # modifie la valeur de "a"
del d["b"] # supprime la clé "b" ; d vaut {'a': 99, 'c': 3}
"a" in d # vaut True : teste la présence d'une clé
len(d) # vaut 2 : nombre de paires clé/valeur
```
---
## Accès sécurisé
```python
d.get("z") # vaut None si la clé est absente (pas d'erreur)
d.get("z", 0) # vaut 0 : valeur par défaut si la clé est absente
d["z"] # KeyError si la clé est absente
```
---
## Parcours
```python
d = {"x": 10, "y": 20}
for cle in d: # parcours des clés
print(cle, d[cle]) # affiche x 10, puis y 20
for cle, val in d.items(): # parcours des paires
print(cle, val) # affiche x 10, puis y 20
for val in d.values(): # parcours des valeurs seules
print(val) # affiche 10, puis 20
```
---
## Méthodes utiles
| Méthode | Résultat |
|---|---|
| `d.keys()` | vue des clés |
| `d.values()` | vue des valeurs |
| `d.items()` | vue des paires (clé, valeur) |
| `d.get(k, défaut)` | valeur ou défaut si clé absente |
| `d.pop(k)` | renvoie la valeur de la clé k et supprime la clé |
Un dictionnaire garde l'ordre d'insertion des clés : le parcours et l'affichage suivent cet ordre.
---
## Pattern — comptage d'occurrences
```python
texte = input() # entrée : abracadabra
freq = {}
for c in texte:
freq[c] = freq.get(c, 0) + 1
print(freq) # affiche {'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}
```
**À manipuler :** suivez le même programme avec l'entrée banane. À chaque lettre, `freq.get(c, 0)` renvoie le compte actuel, ou 0 pour une lettre nouvelle.
```sq-trace
texte = input() # entrée : banane
freq = {}
for c in texte:
freq[c] = freq.get(c, 0) + 1
print(freq)
---
1 | texte = 'banane' |
2 | freq = {} |
3 | c = 'b' |
4 | freq = {'b': 1} |
3 | c = 'a' |
4 | freq = {'b': 1, 'a': 1} |
3 | c = 'n' |
4 | freq = {'b': 1, 'a': 1, 'n': 1} |
3 | c = 'a' |
4 | freq = {'b': 1, 'a': 2, 'n': 1} |
3 | c = 'n' |
4 | freq = {'b': 1, 'a': 2, 'n': 2} |
3 | c = 'e' |
4 | freq = {'b': 1, 'a': 2, 'n': 2, 'e': 1} |
3 | |
5 | | {'b': 1, 'a': 2, 'n': 2, 'e': 1}
```
---
## Pattern — regroupement
```python
notes = [("Alice", 15), ("Bob", 12), ("Alice", 18)]
par_eleve = {}
for nom, note in notes:
if nom not in par_eleve:
par_eleve[nom] = []
par_eleve[nom].append(note)
print(par_eleve) # affiche {'Alice': [15, 18], 'Bob': [12]}
```
## À vous
**À manipuler :** prédisez la sortie, ligne par ligne.
```sq-affiche
stock = {"pomme": 3, "poire": 0}
stock["kiwi"] = 5
stock["pomme"] += 2
print(stock["pomme"])
print(stock.get("prune", 0))
print(len(stock))
print(list(stock))
---
saisie: lignes
réponse: 5\n0\n3\n['pomme', 'poire', 'kiwi']
explication: get renvoie la valeur par défaut 0 pour une clé absente. list(stock) donne les clés dans l'ordre d'insertion.
```
```sq-affiche
d = {}
for mot in ["un", "deux", "un", "trois", "un"]:
d[mot] = d.get(mot, 0) + 1
print(d)
---
réponse: {'un': 3, 'deux': 1, 'trois': 1}
explication: chaque mot nouveau entre avec la valeur 1. Les apparitions suivantes ajoutent 1.
```
%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/10_ensembles\|← Ensembles]] | [[Code et Développement/Programmation/Lecture de Code - Python/12_fonctions\|Fonctions →]] |
> |:---|---:|
%% nav-fin %%