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
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
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"] # supprimeItérer sur un dictionnaire
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 ?
"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".
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
É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`.
Afficher l'indice
.get('telefono', 'sconosciuto') ne lève pas KeyError.
Solution disponible après 3 tentatives
Exercice de révision
É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`.
Afficher l'indice
sum(prices.values()) additionne toutes les valeurs.
Solution disponible après 3 tentatives
Défi supplémentaire
É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.
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