madamasterclass.com

📔 p-uplets nommés et dictionnaires

Exploration des p-uplets nommés et les dictionnaires

1. Dictionnaires vs Namedtuples
Dictionnaires
  • ✅ Collection mutable
  • ✅ Clés uniques et hashables
  • ✅ Accès O(1) par clé
  • ✅ Ordre préservé (Python 3.7+)
Namedtuples
  • ✦ Alternative légère aux classes
  • ✦ Accès par attribut
  • ✦ Immuable (thread-safe)
  • ✦ Moins gourmand en mémoire
2. Syntaxe de base
Dictionnaire
# Création
d = {"nom": "Dupont", "âge": 30}

# Accès
d["nom"]  # Dupont

# Modification
d["âge"] = 31

# Méthodes
d.keys(), d.values()
Namedtuple
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()
3. Quand utiliser ?
✅ Dictionnaire
  • Données modifiables
  • Clés dynamiques
  • Structures imbriquées
  • Traitement JSON
✅ Namedtuple
  • Données en lecture seule
  • Structure fixe
  • Performance mémoire
  • Code plus lisible
4. Comparaison
Critère Dictionnaire Namedtuple
Mutabilité ✔️ Modifiable ❌ Immuable
Mémoire ~296 bytes ~64 bytes
Performance Accès O(1) Accès O(1)
💡 Dictionnaire pour flexibilité, namedtuple pour performance

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.

Représentation des dictionnaires

1. Rappel sur les dictionnaires
  • ✅ Collection mutable de paires clé-valeur.
  • ✅ Clés uniques et valeurs accessibles par clé.
  • ✅ Exemple : 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
2. P-uplets nommés (namedtuples)
  • ✦ Définition : Tuple immuable avec des champs nommés (comme une mini-classe).
  • ✦ Avantages :
    • Accès aux champs par attribut (obj.champ) ou indice (obj[0])
    • Plus léger qu'un dictionnaire.
⌨️  
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)
3. Quand utiliser l'un ou l'autre ?
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
4. Cas pratiques
  • Dictionnaire : Gestion de configurations modifiables.
⌨️  
config = {"resolution": "1920x1080", "volume": 80}
config["volume"] = 90  # Modification facile
config["fullscreen"] = True  # Ajout d'une nouvelle clé
  • Namedtuple : Stockage de données immuables (coordonnées, dates).
⌨️  
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x, p.y)  # Lecture intuitive
# p.x = 30  # Erreur: immuable!
5. Conversions
  • ✦ Namedtuple → Dictionnaire :
⌨️  
personne_dict = p1._asdict()
print(personne_dict)  # {'nom': 'Alice', 'âge': 25}
  • ✦ Dictionnaire → Namedtuple :
⌨️  
p2 = Personne(**{"nom": "Bob", "âge": 40})
print(p2)  # Personne(nom='Bob', âge=40)
6. Conclusion

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.

Dictionnaires en Python

Exercice 1: ★ ★ ★ ☆ ☆

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.

1. Création du dictionnaire :
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}")


Exercice 2: ★ ★ ★ ★ ☆

À 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.

1. Calcul de la moyenne :
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)


Exercice 3: ★ ★ ★ ★ ★

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.

1. Création du dictionnaire :
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}.")


Exercice 4: ★ ★ ★ ★ ★

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.

1. Création du dictionnaire :
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)


Exercice 5: ★ ★ ★ ★ ★

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.

1. Création du dictionnaire :
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}")


Dictionnaires et Fonctions en Python

Exercice 1: ★ ★ ★ ☆ ☆

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).

1. Création du dictionnaire :
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}")


Exercice 2: ★ ★ ★ ★ ☆

É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).

1. Création du dictionnaire :
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}")


Exercice 3: ★ ★ ★ ★ ★

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).

1. Création du dictionnaire :
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}")


Exercice 4: ★ ★ ★ ☆ ☆

É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).

1. Création du dictionnaire :
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}")


Exercice 5: ★ ★ ★ ★ ★

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).

1. Création du dictionnaire :
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}")


Forum(s) associé(s)

Page: