Passer au contenu principal
eLearner.app
Module 3 · Leçon 3 sur 411/36 dans le cours~12 min
Leçons du module (3/4)

Dictionnaires

Un dictionnaire (dict) est une carte clé → valeur : vous associez une clé (presque toujours une chaîne) à une valeur de n'importe quel type. C'est la structure de données fondamentale pour modéliser des entités du monde réel.

Créer un dictionnaire

Python
vuoto = {}
utente = {"nome": "Ada", "anni": 36, "attivo": True}
# constructeur alternatif
utente = dict(nome="Ada", anni=36, attivo=True)

Les clés doivent être hashables (immuables) : chaînes, nombres, tuples d'éléments hashables. Les valeurs, en revanche, peuvent être n'importe quoi — même d'autres dictionnaires.

Accès, modification, suppression

Python
utente["nome"]            # 'Ada'
utente["email"]           # KeyError!
utente.get("email")       # None       (défaut sécurisé)
utente.get("email", "—")  # '—'        (défaut personnalisé)
utente["citta"] = "Roma"  # ajoute / met à jour
del utente["attivo"]      # supprime

Itérer sur un dictionnaire

Python
for chiave in utente:               # itère sur les CLÉS (comportement par défaut)
    print(chiave, utente[chiave])

for chiave in utente.keys():        # explicite
    ...

for valore in utente.values():
    print(valore)

for chiave, valore in utente.items():    # idiome le plus courant
    print(f"{chiave} = {valore}")

L'ordre d'itérations est l'ordre d'insertion (garanti depuis Python 3.7).

La clé existe-t-elle ?

Python
"nome" in utente     # True
"email" in utente    # False     (N'utilise PAS la valeur, utilise la clé !)

setdefault : initialiser au premier accès

Un modèle fréquent : "si la clé n'existe pas, insère le défaut ; dans tous les cas, renvoie la valeur actuelle".

Python
gruppi = {}
for nome in ["Ada", "Linus", "Ada", "Grace", "Linus", "Ada"]:
    gruppi.setdefault(nome, []).append(1)
# {'Ada': [1, 1, 1], 'Linus': [1, 1], 'Grace': [1]}

Il existe également collections.Counter pour le cas spécifique du comptage (nous le verrons dans le module stdlib).

Itérer sur des dictionnaires

Vous pouvez itérer sur un dictionnaire de plusieurs manières :

  • for k in d : boucle sur les clés uniquement (comportement par défaut).
  • for k, v in d.items() : boucle simultanément sur les paires clé-valeur (très utile).
  • for v in d.values() : boucle sur les valeurs uniquement.

À vous de jouer

Exercice#python.m3.l3.e1
Tentatives : 0Chargement…

Étant donné `user = {'nome': 'Ada', 'anni': 36}`, ajoutez la clé 'email' = 'ada@ex.com' puis assignez à `email_or_default` la valeur de la clé 'telefono' en utilisant .get avec 'sconosciuto' par défaut. Évaluez `email_or_default`.

Chargement de l'éditeur…
Afficher l'indice

.get('telefono', 'sconosciuto') ne lève pas KeyError.

Solution disponible après 3 tentatives

Exercice de révision

Exercice#python.m3.l3.e2
Tentatives : 0Chargement…

Étant donné `prices = {'mela': 1.2, 'pera': 1.5, 'kiwi': 2.0}`, calculez la somme de toutes les valeurs et assignez-la à `total`. Évaluez `total`.

Chargement de l'éditeur…
Afficher l'indice

sum(prices.values()) additionne toutes les valeurs.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#python.m3.l3.e3
Tentatives : 0Chargement…

Étant donné le dictionnaire `user = {'name': 'Alice'}`, utilisez la méthode `.get()` pour récupérer la valeur de la clé `'role'`. Si la clé n'existe pas, faites-lui renvoyer la valeur par défaut `'guest'`. Enregistrez le résultat dans `user_role` et évaluez-le.

Chargement de l'éditeur…
Afficher l'indice

La méthode get accepte un deuxième paramètre comme valeur de repli : user.get('role', 'guest').

Solution disponible après 3 tentatives