Python : Les dictionnaires
De www.yakakliker.org
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: Dansjson.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.")