« Python : Les dictionnaires » : différence entre les versions

De www.yakakliker.org
Aucun résumé des modifications
Aucun résumé des modifications
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 43 : Ligne 43 :
[[Catégorie:Scripts]]
[[Catégorie:Scripts]]


<syntaxhighlight lang="python3">
# Un dictionnaire utilise des accolades {}
invite = {
    "nom": "Alice",
    "age": 25,
    "est_present": True
}


‎<html>
# Accéder à une valeur via sa clé
print(invite["nom"])  # Affiche: Alice
</syntaxhighlight>
 
=== Exemple d'un script plus complexe utilisant un dictionnaire : ===
<syntaxhighlight lang="python3">
import json  # Toujours en haut du fichier
 
def ajouter_invite(liste_invites):
    """Fonction pour ajouter un nom à la liste avec vérification."""
    nom = input("Entrez un nom (ou 'stop') : ").strip()
 
    if nom.lower() == "stop":
        return False
 
    if nom == "" or nom.isdigit():
        print("Erreur : Le nom ne peut pas être vide ou un simple nombre.")
    else:
        try:
            age = int(input(f"Âge de {nom} : "))
            nouvel_invite = {"nom": nom, "age": age}
            liste_invites.append(nouvel_invite)
            print("Invité enregistré.")
        except ValueError:
            print("Erreur : L'âge doit être un nombre entier.")
 
    return True
 
def sauvegarder_liste(liste_a_sauver, nom_fichier):
    """Enregistre la liste au format JSON."""
    try:
        with open(nom_fichier, "w", encoding="utf-8") as f:
            # On utilise le paramètre 'liste_a_sauver' et non la variable globale
            json.dump(liste_a_sauver, f, indent=4, ensure_ascii=False)
        print(f"Sauvegarde réussie dans {nom_fichier}")
    except Exception as e:
        print(f"Erreur lors de la sauvegarde : {e}")
 
# --- Programme principal ---
invites = []
en_cours = True
 
print("--- Gestionnaire d'invités Sécurisé ---")
 
while en_cours:
    try:
        en_cours = ajouter_invite(invites)
    except Exception as e:
        print(f"Une erreur inattendue est survenue : {e}")
 
print(f"\nListe finale ({len(invites)} personnes) :")
# Affichage plus propre pour des dictionnaires
for invite in invites:
    print(f"- {invite['nom']} ({invite['age']} ans)")
 
sauvegarder_liste(invites, "mes_invites.json")
</syntaxhighlight>
 
* '''<code>ensure_ascii=False</code>''' : Dans <code>json.dump</code>, cela permet de garder les accents (é, à, ç) lisibles directement dans le fichier JSON si vous l'ouvrez avec un bloc-notes.
* '''Affichage final''' : Ajout d'une boucle <code>for</code> à la fin pour afficher proprement les données du dictionnaire plutôt que d'afficher le bloc de code brut.
 
=== Supprimer un dictionnaire d'une liste ===
Imaginons que vos invités sont des dictionnaires dans une liste, vous ne pouvez pas simplement faire <code>invites.remove("Alice")</code> car "Alice" n'est pas dans la liste, c'est le dictionnaire <code>{"nom": "Alice", "age": 25}</code> qui s'y trouve.<syntaxhighlight lang="python3">
def supprimer_invite(liste_invites):
    """Cherche un nom et le retire de la liste s'il existe."""
    nom_a_chercher = input("Nom de l'invité à supprimer : ").strip()
    trouve = False
 
    # On parcourt la liste à l'envers ou on crée une nouvelle liste
    # La méthode la plus simple pour débuter :
    for i in liste_invites:
        if i["nom"].lower() == nom_a_chercher.lower():
            liste_invites.remove(i)
            print(f"L'invité {nom_a_chercher} a été supprimé.")
            trouve = True
            break # On arrête la boucle une fois trouvé
   
    if not trouve:
        print("Aucun invité trouvé à ce nom.")
</syntaxhighlight>
 
 
‎<html>
<a href="https://www.compteurdevisite.com" title="compteur web gratuit sans pub"><img src="https://counter6.optistats.ovh/private/compteurdevisite.php?c=b4epghealnwlf7wuq7gn3ygll9aywrfx" border="0" title="compteur web gratuit sans pub" alt="compteur web gratuit sans pub"></a>
<a href="https://www.compteurdevisite.com" title="compteur web gratuit sans pub"><img src="https://counter6.optistats.ovh/private/compteurdevisite.php?c=b4epghealnwlf7wuq7gn3ygll9aywrfx" border="0" title="compteur web gratuit sans pub" alt="compteur web gratuit sans pub"></a>
‎</html>
‎</html>

Dernière version du 21 janvier 2026 à 14:37

Les dictionnaires sont déclarés en utilisant des accolades :

annuaire = {
    "clé1": 'valeur1',
    "clé2": 'valeur2',
}


Exemple :

annuaire = {
    "Jean Dupont": '0145854547',
    "Paul Joseph": '0145854547',
    "Stéphanie Leroux": '0458477854',
}


On accède ensuite aux valeurs en utilisant les clés avec des crochets :

annuaire = {
    "Jean Dupont": '0145854547',
    "Paul Joseph": '0145854547',
    "Stéphanie Leroux": '0458477854',
}
print(annuaire['Jean Dupont'])
print(annuaire['Paul Joseph'])


Nous pouvons stocker des objets imbriqués et y accéder sans problème :

personne = {
    'adresse': {
        'ville': 'Nice',
        'pays': 'France'
    }
}
print(personne['adresse']['ville'])  #  Nice
# Un dictionnaire utilise des accolades {}
invite = {
    "nom": "Alice",
    "age": 25,
    "est_present": True
}

# Accéder à une valeur via sa clé
print(invite["nom"])  # Affiche: Alice

Exemple d'un script plus complexe utilisant un dictionnaire :

import json  # Toujours en haut du fichier

def ajouter_invite(liste_invites):
    """Fonction pour ajouter un nom à la liste avec vérification."""
    nom = input("Entrez un nom (ou 'stop') : ").strip()

    if nom.lower() == "stop":
        return False

    if nom == "" or nom.isdigit():
        print("Erreur : Le nom ne peut pas être vide ou un simple nombre.")
    else:
        try:
            age = int(input(f"Âge de {nom} : "))
            nouvel_invite = {"nom": nom, "age": age}
            liste_invites.append(nouvel_invite)
            print("Invité enregistré.")
        except ValueError:
            print("Erreur : L'âge doit être un nombre entier.")

    return True

def sauvegarder_liste(liste_a_sauver, nom_fichier):
    """Enregistre la liste au format JSON."""
    try:
        with open(nom_fichier, "w", encoding="utf-8") as f:
            # On utilise le paramètre 'liste_a_sauver' et non la variable globale
            json.dump(liste_a_sauver, f, indent=4, ensure_ascii=False)
        print(f"Sauvegarde réussie dans {nom_fichier}")
    except Exception as e:
        print(f"Erreur lors de la sauvegarde : {e}")

# --- Programme principal ---
invites = []
en_cours = True

print("--- Gestionnaire d'invités Sécurisé ---")

while en_cours:
    try:
        en_cours = ajouter_invite(invites)
    except Exception as e:
        print(f"Une erreur inattendue est survenue : {e}")

print(f"\nListe finale ({len(invites)} personnes) :")
# Affichage plus propre pour des dictionnaires
for invite in invites:
    print(f"- {invite['nom']} ({invite['age']} ans)")

sauvegarder_liste(invites, "mes_invites.json")
  • ensure_ascii=False : Dans json.dump, cela permet de garder les accents (é, à, ç) lisibles directement dans le fichier JSON si vous l'ouvrez avec un bloc-notes.
  • Affichage final : Ajout d'une boucle for à la fin pour afficher proprement les données du dictionnaire plutôt que d'afficher le bloc de code brut.

Supprimer un dictionnaire d'une liste

Imaginons que vos invités sont des dictionnaires dans une liste, vous ne pouvez pas simplement faire invites.remove("Alice") car "Alice" n'est pas dans la liste, c'est le dictionnaire {"nom": "Alice", "age": 25} qui s'y trouve.

def supprimer_invite(liste_invites):
    """Cherche un nom et le retire de la liste s'il existe."""
    nom_a_chercher = input("Nom de l'invité à supprimer : ").strip()
    trouve = False

    # On parcourt la liste à l'envers ou on crée une nouvelle liste
    # La méthode la plus simple pour débuter :
    for i in liste_invites:
        if i["nom"].lower() == nom_a_chercher.lower():
            liste_invites.remove(i)
            print(f"L'invité {nom_a_chercher} a été supprimé.")
            trouve = True
            break # On arrête la boucle une fois trouvé
    
    if not trouve:
        print("Aucun invité trouvé à ce nom.")


compteur web gratuit sans pub