À la fin de cette séquence vous serez capable de manipuler un dictionnaire.
Un dictionnaire est un ensemble de couples clé – valeur séparés par des virgules. Cet ensemble étant encadré par des accolades. Un deux-points ( : ) sépare chaque clé de sa valeur associée.
Contrairement aux séquences (listes, chaines de caractères, tuples), un dictionnaire est une collection non ordonnée.
On accède aux valeurs d’un dictionnaire par des clefs.
Un dictionnaire est un objet itérable et mutable (on peut modifier un dictionnaire en place).
Les dictionnaires sont aussi souvent appelés tables de recherche ou tableaux associatifs.
Les dictionnaires sont l'une des structures de données les plus importantes et les plus fréquemment utilisées en informatique.
dico_info = {
"ram" : "mémoire à accès aléatoire",
"web":"ensemble de pages web",
"hyperlien": "chaîne de caractères qui constitue un lien vers une autre page",
"cryptographie":"art du chiffrement",
"algorithmique": "étude des algorithmes",
"protocole":"ensemble de règles qui régissent la communications entre couches homologues"
}
#ici une clé un mot et sa définition la valeur associée.
type(dico_info)
"ram" est une clé et "mémoire à accès aléatoire" est sa valeur associée.
"web" est une clé et "ensemble de pages web" est sa valeur associée...
d = {}
C'est le nombre de paires clé - valeur contenus dans le dictionnaire.
len(dico_info)
Les éléments d'un dictionnaire ne sont pas ordonnés. Autrement dit, un dictionnaire est affiché sans ordre particulier.
Une valeur est extraite d'un dictionnaire en spécifiant sa clé associée entre crochets ( [ ] )
# Quelle est la définition du mot algorithmique (quelle est la valeur associée à algorithmique) ?
dico_info["algorithmique"]
dico_info["web"]
Si on fait référence à une clé qui n'est pas dans le dictionnaire, il se produit une erreur, KeyError :
#Exemple :
dico_info["programmation"]
# Le mot hyperlien est-il dans dico_info
"hyperlien" in dico_info
"réseau" in dico_info
Attention : L'opérateur in ne fonctionne pas avec les valeurs !
"mémoire à accès aléatoire" in dico_info
False
Itérer sur un dictionnaire revient à itérer sur les clés du dictionnaire.
#Parcourir les clés d'un dictionnaire
for mot in dico_info:
print(mot)
On donne le dictionnaire suivant :
annuaire = {('Martin','Olivier'):'0689514311',
('Nana','Hozier'):'0710342578',
('Martin', 'Naïm'): '0666666665'
}
Écrire un programme qui parcourt et affiche le prénom suivi du nom puis " a pour numéro de téléphone " et le numéro de téléphone du concerné.
Exemple :
Olivier Martin a pour numéro de téléphone 0689514311.
dico_info["répertoire"] = "un ensemble de fichiers de l'ordinateur"
print(dico_info)
dico_info["variable booléenne"] = "une variable dont la valeur est soit 1 soit 0. "
'''
On pourrait aussi utiliser la méthode setdefault():
si la clé n'existe pas, alors la clé et la valeur par défaut son insérées dans le dictionnaire.
En revanche, si la clé existe déjà, rien ne se produit.
'''
dico_info.setdefault("tuple", "Collection d'objets séparés par des virgules.")
#on insère le couple ("tuple", "Collection d'objets séparés par des virgules.")
dico_info.setdefault("web", "une ram")#rien ne se produit
Quel est le résultat de l'instruction suivante ?
d[[3,4]] = False
Remarques :
loisirs = {'claude':'foot',
'noémie':'échec',
'hassan':'gym'
}
#On change le loisir de Claude
loisirs['claude'] = 'hand'
loisirs
Cette instruction a simplement permis de remplacer la valeur ''foot'' par ''hand''.
del loisirs['claude']
loisirs
d
d.clear()
d
help(dict.popitem)
Help on method_descriptor: popitem(self, /) Remove and return a (key, value) pair as a 2-tuple. Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
Obtenir toutes les clés d'un dictionnaire
annuaire.keys()
type(annuaire.keys())
Obtenir toutes les valeurs d'un dictionnaire
annuaire.values()
Obtenir tous les couples (clé, valeur) d'un dictionnaire
annuaire.items()
type(annuaire.items())
Remarque :
Si l'on souhaite obtenir de véritables listes à partir de ces trois méthodes de dictionnaires, il faut les précéder de la fonction de transtypage list().
cles = list(annuaire.keys())
for cle, valeur in annuaire.items():
print(f"Le numéro de téléphone de {cle[1]} {cle[0]} est {valeur}")
dico = {"dupond": "nicolas", 1: "one", 3.7: ["élève","prof"], (1,2): True}
dico["dupond"]
'nicolas'
dico.get('dupond')
'nicolas'
#Si la clé n'existe pas, on n'obtient aucun retour
dico.get("two")
#Pour éviter cela, on ajoute un message par défaut à get.
dico.get("two", "n'existe pas !")
"n'existe pas !"
d.get((1, 2), "n'existe pas !")
l = [('a',1),('b',2),('c',3)]
d = dict(l)
d
dico = {i: i**2 for i in range(1, 6)}
dico
personnes = [('Bernard', 65), ('hermine', 22), ('Brigitte', 57),('barush', 34),('maïramou', 29), ('Bennett', 18)]
dico2 = {personne[0]: personne[1] for personne in personnes}
print(dico2)
{'Bernard': 65, 'hermine': 22, 'Brigitte': 57, 'barush': 34, 'maïramou': 29, 'Bennett': 18}
#Simplement
dico22 = dict(personnes)
dico22
#Une liste est ordonnée
fruits1 = ["poire", "orange", "banane"]
fruits2 = ["banane", "poire", "orange"]
fruits1 == fruits2
False
#Un dictionnaire n'est pas ordonné
dico1 = {"pommes" : 15, "bananes" : 35, "raisins" : 12}
dico2 = {"bananes" : 35, "raisins" : 12, "pommes" : 15}
dico1 == dico2
True
Faites-vous plaisir 1 :
Donnez la réponse de l'interpréteur Python à chacun des éléments suivants à partir d'une session d'interpréteur continue :
dict_fruits = {"pommes" : 15, "bananes" : 35, "raisins" : 12 }
dict_fruits["bananes"]
dict_fruits["oranges"] = 20
len (dict_fruits)
"kaki" in dict_fruits
dict_fruits["kiwi"]
dict_fruits.get("kiwi", 0)
dict_fruits = list(dict_fruits.keys())
dict_fruits.sort()
print(fruits)
del dict_fruits["pommes"]
"pommes" in dict_fruits
Appliquez ce que vous avez appris pour remplir le corps de la fonction ci-dessous :
def ajoute_un_fruit(inventaire, fruit, quantite = 0):
return
# Ces tests doivent fonctionner avec la fonction
nouvel_inventaire = {}
ajoute_un_fruit(nouvel_inventaire, "fraises", 10)
"fraises" in nouvel_inventaire renvoie True
nouvel_inventaire["fraises"] == 10 renvoie True
ajoute_un_fruit(nouvel_inventaire, "papaye", 25)
nouvel_inventaire["fraises"] == 35 renvoie False
Faites-vous plaisir 2 :
On donne : animal1 = {"nom" : "girafe", "taille" : 5.0, "poids" : 1100}.
Faites-vous plaisir 3 :
On donne : dict_nombres = {"un": 1, "deux": 2, "trois": 3, "quatre": 4}
Écrire un code qui crée un nouveau dictionnaire, nouveau_dict_nombres, qui a pour clés les valeurs de dict_nombres et valeurs les clés de dict_nombres. Autrement dit, nouveau_dict_nombres inverse clés et valeurs de dict_nombres.
Faites-vous plaisir 4 :
On donne :
dict_revenus = {"Yaël":100_000, "Timoléon":75_000, "Annie": 20_000, "Claude": 80_000, "Amina": 50_000}
Faites-vous plaisir 5 :
Écrire une fonction nbre_occurrences qui prend en entrée un mot, mot, et renvoie un dictionnaire dont les items ont pour clés les lettres rencontrées et valeurs associées le nombre d'occurrences (apparitions) de chacune des lettres dans le mot. La casse doit être ignorée. On documentera la fonction.
Un exemple de sortie du programme lorsque l'utilisateur entre la donnée « missiSSipi », ressemblerait à ceci :
{'m': 1, 'i': 4, 's': 4, 'p': 1}