Parcourir, compter, regrouper
Parcourir un dictionnaire
Trois façons de parcourir un dictionnaire avec for :
| Écriture | Donne à chaque tour |
|---|---|
for cle in d: |
chaque clé |
for valeur in d.values(): |
chaque valeur |
for cle, valeur in d.items(): |
chaque paire, dans deux variables |
prix = {"riz": 1200, "savon": 500}
for produit, montant in prix.items():
print(f"{produit} : {montant} FCFA")
riz : 1200 FCFA
savon : 500 FCFA
.items() est la plus utile. On l'a déjà vu avec enumerate et zip : deux variables séparées par une virgule reçoivent les deux morceaux de chaque élément.
Depuis Python 3.7, un dictionnaire garde l'ordre d'insertion : on le parcourt dans l'ordre où les paires ont été ajoutées.
Et comme pour les listes : sum(d.values()) donne la somme des valeurs, max(d.values()) la plus grande.
Le motif du compteur
Le motif le plus utile des dictionnaires : compter combien de fois chaque chose apparaît. C'est un accumulateur, mais avec une case par catégorie.
votes = ["Awa", "Boris", "Awa", "Chantal", "Awa", "Boris"]
compteur = {}
for nom in votes:
compteur[nom] = compteur.get(nom, 0) + 1
print(compteur) # {'Awa': 3, 'Boris': 2, 'Chantal': 1}
La ligne clé, compteur[nom] = compteur.get(nom, 0) + 1, se lit de droite à gauche :
compteur.get(nom, 0): combien de votesnoma déjà ? 0 si c'est la première fois qu'on le voit ;+ 1: on ajoute ce vote ;compteur[nom] = ...: on range le nouveau total.
Sans .get, la première apparition de chaque nom provoquerait un KeyError.
Le même motif pour additionner par catégorie
for produit, montant in ventes:
total[produit] = total.get(produit, 0) + montant
C'est exactement ce que fait le fameux groupby de pandas, ou le GROUP BY de SQL, que tu verras dans le module données.
Compter les mots d'une phrase
Lance, puis remplace la phrase par une phrase à toi. .split() découpe un texte en liste de mots (aux espaces).
phrase = "le chat voit le chien et le chien voit le chat"
mots = phrase.split()
print(mots)
compteur = {}
for mot in mots:
compteur[mot] = compteur.get(mot, 0) + 1
for mot, n in compteur.items():
print(f"{mot} : {n}")
Exercice : Le dépouillement
Compte les votes dans un dictionnaire resultats : pour chaque candidat, le nombre de voix.
Voir une solution
bulletins = ["Ngono", "Mballa", "Ngono", "Essomba", "Ngono", "Mballa"] # donné
resultats = {}
for nom in bulletins:
resultats[nom] = resultats.get(nom, 0) + 1Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Le chiffre d'affaires par produit
ventes est une liste de ventes. Chaque vente est une liste de deux éléments : le produit et le montant. Calcule dans par_produit le total vendu pour chaque produit.
Astuce : for produit, montant in ventes: déballe chaque petite liste dans deux variables.
Voir une solution
ventes = [["riz", 2400], ["savon", 1500], ["riz", 1200], ["huile", 3000], ["savon", 500]] # donné
par_produit = {}
for produit, montant in ventes:
par_produit[produit] = par_produit.get(produit, 0) + montantDans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Le produit vedette
À partir du dictionnaire par_produit (donné), trouve dans vedette le nom du produit qui a rapporté le plus. Parcours les paires avec .items(), avec le motif du maximum.
Voir une solution
par_produit = {"riz": 3600, "savon": 2000, "huile": 3000} # donné
vedette = None
meilleur = None
for produit, montant in par_produit.items():
if meilleur is None or montant > meilleur:
meilleur = montant
vedette = produitDans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Le mot le plus fréquent
Combine tout. Trouve dans plus_frequent le mot qui revient le plus souvent dans texte, sans tenir compte des majuscules.
Étapes : mettre en minuscules, découper avec .split(), compter dans un dictionnaire, puis chercher le maximum.
Voir une solution
texte = "Le riz est cher. Le savon est cher. Le riz est rare." # donné
compteur = {}
for mot in texte.lower().split():
compteur[mot] = compteur.get(mot, 0) + 1
plus_frequent = max(compteur, key=compteur.get)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice