Exploration des p-uplets nommés et les dictionnaires
# Création d = {"nom": "Dupont", "âge": 30} # Accès d["nom"] # Dupont # Modification d["âge"] = 31 # Méthodes d.keys(), d.values()
from collections import namedtuple # Définition Personne = namedtuple("Personne", ["nom", "âge"]) # Instanciation p = Personne("Alice", 25) # Accès p.nom # Alice p[1] # 25 (index) # Méthodes p._asdict()
Critère | Dictionnaire | Namedtuple |
---|---|---|
Mutabilité | ✔️ Modifiable | ❌ Immuable |
Mémoire | ~296 bytes | ~64 bytes |
Performance | Accès O(1) | Accès O(1) |
Dans ce cours, nous allons comparer deux structures de données Python puissantes : les dictionnaires et les p-uplets nommés (namedtuples). Nous verrons leurs caractéristiques, leurs avantages respectifs et les cas d'utilisation appropriés pour chacun.
Les dictionnaires et p-uplets nommés (namedtuples) sont deux structures de données puissantes en Python pour gérer des collections d'objets. Alors que les dictionnaires associent des clés à des valeurs, les namedtuples permettent de créer des tuples avec des champs nommés pour un accès plus lisible.
personne = {"nom": "Dupont", "âge": 30}
# Exemple complet de dictionnaire personne = { "nom": "Dupont", "âge": 30, "ville": "Paris" } print(personne["nom"]) # Accès par clé personne["âge"] = 31 # Modification
obj.champ
) ou indice (obj[0]
)from collections import namedtuple Personne = namedtuple("Personne", ["nom", "âge"]) p1 = Personne(nom="Alice", âge=25) # Accès aux champs print(p1.nom) # Alice print(p1[1]) # 25 (accès par indice)
Critère | Dictionnaire | Namedtuple |
---|---|---|
Mutabilité | ✔️ Modifiable | ❌ Immuable |
Performance | Accès par clé rapide | Plus léger en mémoire |
Cas typique | Configurations modifiables | Données immuables structurées |
config = {"resolution": "1920x1080", "volume": 80} config["volume"] = 90 # Modification facile config["fullscreen"] = True # Ajout d'une nouvelle clé
Point = namedtuple("Point", ["x", "y"]) p = Point(10, 20) print(p.x, p.y) # Lecture intuitive # p.x = 30 # Erreur: immuable!
personne_dict = p1._asdict() print(personne_dict) # {'nom': 'Alice', 'âge': 25}
p2 = Personne(**{"nom": "Bob", "âge": 40}) print(p2) # Personne(nom='Bob', âge=40)
Les dictionnaires et namedtuples sont complémentaires en Python. Utilisez les dictionnaires pour des collections modifiables et les namedtuples pour des données immuables et structurées. Le choix dépendra de vos besoins spécifiques en termes de mutabilité, de performance et de lisibilité du code.
On souhaite créer un dictionnaire représentant les notes d'élèves dans une classe. Chaque élève est associé à sa note.
1. Créez un dictionnaire notes
contenant les élèves suivants et leurs notes :
• Alice : 12
• Bob : 15
• Charlie : 9
• David : 14
2. Ajoutez un nouvel élève, Eva, avec une note de 16.
3. Modifiez la note de Charlie à 10.
4. Supprimez Bob du dictionnaire.
5. Affichez les élèves et leurs notes.
notes = {
"Alice": 12,
"Bob": 15,
"Charlie": 9,
"David": 14
}
2. Ajout d'Eva :
notes["Eva"] = 16
3. Modification de la note de Charlie :
notes["Charlie"] = 10
4. Suppression de Bob :
del notes["Bob"]
5. Affichage :
for eleve, note in notes.items():
print(f"{eleve}: {note}")
À partir du dictionnaire notes
créé dans l'exercice précédent :
1. Calculez la moyenne des notes.
2. Trouvez l'élève ayant la note la plus élevée.
3. Trouvez l'élève ayant la note la plus basse.
moyenne = sum(notes.values()) / len(notes)
2. Élève avec la note la plus élevée :
eleve_max = max(notes, key=notes.get)
3. Élève avec la note la plus basse :
eleve_min = min(notes, key=notes.get)
Créer un dictionnaire pour stocker les capitales de pays. Les pays et leurs capitales sont les suivants :
• France : Paris
• Espagne : Madrid
• Italie : Rome
• Allemagne : Berlin
1. Créez le dictionnaire et affichez-le.
2. Ajoutez le pays "Portugal" avec sa capitale "Lisbonne".
3. Changez la capitale de l'Italie pour "Florence".
4. Supprimez l'Allemagne.
5. Affichez toutes les capitales dans une liste formatée.
capitales = {
"France": "Paris",
"Espagne": "Madrid",
"Italie": "Rome",
"Allemagne": "Berlin"
}
Affichage :
print(capitales)
2. Ajout du Portugal :
capitales["Portugal"] = "Lisbonne"
3. Modification de la capitale de l'Italie :
capitales["Italie"] = "Florence"
4. Suppression de l'Allemagne :
del capitales["Allemagne"]
5. Affichage formaté :
for pays, capitale in capitales.items():
print(f"La capitale de {pays} est {capitale}.")
Vous avez un dictionnaire contenant les ventes de produits :
• Produit A : 100
• Produit B : 200
• Produit C : 150
1. Créez un dictionnaire ventes
et affichez-le.
2. Calculez le total des ventes.
3. Trouvez le produit avec le maximum de ventes.
4. Ajoutez un produit D avec 250 ventes.
5. Affichez le produit avec le minimum de ventes.
ventes = {
"Produit A": 100,
"Produit B": 200,
"Produit C": 150
}
Affichage :
print(ventes)
2. Calcul du total des ventes :
total_ventes = sum(ventes.values())
3. Produit avec le maximum de ventes :
produit_max = max(ventes, key=ventes.get)
4. Ajout du produit D :
ventes["Produit D"] = 250
5. Produit avec le minimum de ventes :
produit_min = min(ventes, key=ventes.get)
Créer un dictionnaire pour répertorier les mots de passe des utilisateurs :
• utilisateur1 : "abc123"
• utilisateur2 : "password"
• utilisateur3 : "helloWorld"
1. Créez le dictionnaire mots_de_passe
et affichez-le.
2. Changez le mot de passe de l'utilisateur2 en "newpassword".
3. Supprimez l'utilisateur3.
4. Vérifiez si un mot de passe existe pour un utilisateur donné.
5. Affichez tous les utilisateurs avec leurs mots de passe.
mots_de_passe = {
"utilisateur1": "abc123",
"utilisateur2": "password",
"utilisateur3": "helloWorld"
}
Affichage :
print(mots_de_passe)
2. Changement du mot de passe de l'utilisateur2 :
mots_de_passe["utilisateur2"] = "newpassword"
3. Suppression de l'utilisateur3 :
del mots_de_passe["utilisateur3"]
4. Vérification de l'existence d'un mot de passe :
utilisateur = "utilisateur1"
existe = utilisateur in mots_de_passe
5. Affichage de tous les utilisateurs :
for utilisateur, mot_de_passe in mots_de_passe.items():
print(f"{utilisateur}: {mot_de_passe}")
Créez une fonction qui prend en entrée un dictionnaire d'élèves et leurs notes, et retourne la moyenne des notes.
1. Créez un dictionnaire notes
avec les élèves suivants :
- Alice : 12
- Bob : 15
- Charlie : 9
- David : 14
2. Implémentez la fonction calculer_moyenne(d)
.
notes = {
"Alice": 12,
"Bob": 15,
"Charlie": 9,
"David": 14
}
2. Fonction pour calculer la moyenne :
def calculer_moyenne(d):
return sum(d.values()) / len(d)
moyenne = calculer_moyenne(notes)
print(f"Moyenne des notes: {moyenne}")
Écrivez une fonction qui prend un dictionnaire de produits et leurs prix, et retourne le produit le plus cher.
1. Créez un dictionnaire produits
avec les produits suivants :
- "Pomme": 1.5
- "Banane": 0.8
- "Cerise": 2.0
- "Date": 3.0
2. Implémentez la fonction produit_plus_cher(d)
.
produits = {
"Pomme": 1.5,
"Banane": 0.8,
"Cerise": 2.0,
"Date": 3.0
}
2. Fonction pour trouver le produit le plus cher :
def produit_plus_cher(d):
return max(d, key=d.get)
produit_max = produit_plus_cher(produits)
print(f"Produit le plus cher: {produit_max}")
Créer une fonction qui prend un dictionnaire d'employés et leurs salaires, et retourne le salaire moyen. Ensuite, affichez les employés au-dessus de ce salaire moyen.
1. Créez un dictionnaire employes
avec les employés suivants :
- "Jean": 3000
- "Marie": 3500
- "Pierre": 4500
- "Sophie": 4000
2. Implémentez la fonction salaires_moyens(d)
.
employes = {
"Jean": 3000,
"Marie": 3500,
"Pierre": 4500,
"Sophie": 4000
}
2. Fonction pour calculer le salaire moyen et afficher les employés :
def salaires_moyens(d):
moyenne = sum(d.values()) / len(d)
return {k: v for k, v in d.items() if v > moyenne}, moyenne
employes_au_dessus_moyenne, moyenne = salaires_moyens(employes)
print(f"Salaire moyen: {moyenne}")
print(f"Employés au-dessus de la moyenne: {employes_au_dessus_moyenne}")
Écrivez une fonction qui prend un dictionnaire de pays et leurs populations, et retourne le pays avec la plus grande population.
1. Créez un dictionnaire pays
avec les pays suivants :
- "France": 67_000_000
- "Allemagne": 83_000_000
- "Espagne": 47_000_000
- "Italie": 60_000_000
2. Implémentez la fonction pays_plus_popule(d)
.
pays = {
"France": 67_000_000,
"Allemagne": 83_000_000,
"Espagne": 47_000_000,
"Italie": 60_000_000
}
2. Fonction pour trouver le pays le plus peuplé :
def pays_plus_popule(d):
return max(d, key=d.get)
pays_max = pays_plus_popule(pays)
print(f"Pays le plus peuplé: {pays_max}")
Créer une fonction qui prend un dictionnaire de mots et leurs fréquences, et retourne les mots qui apparaissent plus d'une fois.
1. Créez un dictionnaire frequences
avec les mots suivants :
- "chat": 3
- "chien": 1
- "oiseau": 2
- "poisson": 5
2. Implémentez la fonction mots_frequents(d)
.
frequences = {
"chat": 3,
"chien": 1,
"oiseau": 2,
"poisson": 5
}
2. Fonction pour trouver les mots fréquents :
def mots_frequents(d):
return {k: v for k, v in d.items() if v > 1}
mots_plus_frequents = mots_frequents(frequences)
print(f"Mots fréquents: {mots_plus_frequents}")
Abonnez-vous maintenant et recevez notre newsletter hebdomadaire avec des matériaux éducatifs, de nouveaux cours, des articles intéressants, des livres populaires et bien plus encore !