Les données ouvertes, les relevés d’un capteur ou un carnet de notes se présentent souvent sous forme de tables : des lignes (les enregistrements) et des colonnes (les descripteurs). Le format texte CSV permet de les échanger. En Python, on les charge dans une liste de dictionnaires pour les interroger, les trier et les croiser.

Une question sur ce cours ?
ULU, le tuteur d’ULUMINE, t’aide à partir de ce cours.
Objectifs
- Connaître le vocabulaire : table, enregistrement, descripteur, valeur
- Importer un fichier CSV dans une liste de dictionnaires et convertir les types
- Sélectionner les lignes qui vérifient un critère, calculer sur une colonne
- Trier une table selon une colonne avec sorted et une fonction clé
- Fusionner deux tables ayant une colonne commune
1. Tables et format CSV
nom,classe,note
Ana,1A,14
Bob,1B,11
Chloé,1A,17
Dan,1B,9| Terme | Sens | Ici |
|---|---|---|
| Descripteur | nom d’une colonne | nom, classe, note |
| Enregistrement | une ligne de données | Ana,1A,14 |
| Valeur | contenu d’une case | 14 |
CSV signifie Comma-Separated Values : les valeurs sont séparées par des virgules (parfois par des points-virgules dans les fichiers français, car la virgule y sert de séparateur décimal).
2. Importer une table en Python
import csv
with open("notes.csv", encoding="utf-8") as f:
table = list(csv.DictReader(f))
# table[0] vaut {'nom': 'Ana', 'classe': '1A', 'note': '14'}
for ligne in table:
ligne["note"] = int(ligne["note"]) # conversion indispensable3. Rechercher et calculer
# noms des élèves de 1A
noms_1A = [e["nom"] for e in table if e["classe"] == "1A"] # ['Ana', 'Chloé']
# moyenne de la 1B
notes_1B = [e["note"] for e in table if e["classe"] == "1B"] # [11, 9]
moyenne = sum(notes_1B) / len(notes_1B) # 10.0
# meilleure note
meilleure = max(e["note"] for e in table) # 17Une sélection garde les lignes qui vérifient un critère ; une projection ne garde que certaines colonnes. Les listes en compréhension font les deux à la fois.
4. Trier une table
def cle_note(e):
return e["note"]
classement = sorted(table, key=cle_note, reverse=True)
# Chloé (17), Ana (14), Bob (11), Dan (9)- sorted(table, key=f) renvoie une nouvelle liste triée selon la valeur f(e) de chaque ligne ; la table d’origine n’est pas modifiée.
- reverse=True trie dans l’ordre décroissant.
- table.sort(key=f) trie la liste sur place (elle est modifiée).
- Le tri de Python est stable : deux lignes de même clé gardent leur ordre de départ.
5. Fusionner deux tables
Pour fusionner (joindre) deux tables, on associe les lignes qui ont la même valeur dans une colonne commune, par exemple la classe.
profs = [{"classe": "1A", "prof": "M. Roux"},
{"classe": "1B", "prof": "Mme Lin"}]
fusion = []
for e in table:
for p in profs:
if e["classe"] == p["classe"]:
fusion.append({"nom": e["nom"], "classe": e["classe"], "prof": p["prof"]})À retenir
- Table = enregistrements (lignes) × descripteurs (colonnes) ; CSV = valeurs séparées par des virgules.
- csv.DictReader donne une liste de dictionnaires ; les valeurs sont des chaînes à convertir.
- Sélection : [e for e in table if critère] ; projection : [e["col"] for e in table].
- sorted(table, key=fonction, reverse=…) renvoie une nouvelle liste triée.
- Fusion : associer les lignes ayant la même valeur dans une colonne commune.

Et maintenant, à toi !
Vérifie que tu as compris avec les exercices, puis révise avec la fiche.