Algorithmique et Programmation 1
Dictionnaires
Licences Informatique et Mathématiques 1ère année
Premier semestre 2014 – 2015
Les dictionnaires
Comment résoudre efficacement les problèmes suivants ?
I Compter le nombre d’occurrences de chaque mot dans un texte
I Rassembler plusieurs informations concernant une personne (nom, âge, numéro de sécurité sociale, profession, liste d’enfants...) et les passer en argument à une fonction
I Représenter les coefficients d’une matrice ou d’un polynôme
“creux”
I Mémoriser les valeurs de retour d’une fonction pour différents arguments
Nouveau type de données : lesdictionnaires(dict)
Les dictionnaires
Comment résoudre efficacement les problèmes suivants ?
I Compter le nombre d’occurrences de chaque mot dans un texte
I Rassembler plusieurs informations concernant une personne (nom, âge, numéro de sécurité sociale, profession, liste d’enfants...) et les passer en argument à une fonction
I Représenter les coefficients d’une matrice ou d’un polynôme
“creux”
I Mémoriser les valeurs de retour d’une fonction pour différents arguments
Nouveau type de données : lesdictionnaires(dict)
Les dictionnaires
Dictionnaire :
I Objet associant une liste de clés(keys) à desvaleurs (values)
>>> vide = {} # dictionnaire vide
>>> vide = dict() # idem
>>> effectif_groupes = {’a’: 31, ’b’: 28, ’c’: 33,
. . . 9: 18, ’Prépa’: 22}}
>>> effectif_groupes[’c’]
33
>>> ’Prépa’ in effectif_groupes True
I Clés : doivent être non-modifiables (immutable)
>>> {[] : 0}
TypeError: unhashable type: ’list’
I Valeurs : de type quelconque (même mutables)
Dictionnaires vs. listes
I Insertion et suppression en général (beaucoup) plus rapides
I Accès en généralpresque aussi rapide
I Collection mutableset hétérogènesmaisnon ordonnées
>>> d = {’a’:1, ’b’:True, ’c’: ’salut’}
>>> print(d)
{’b’: True, ’a’: 1, ’c’: ’salut’}
>>> d[’b’] = 3.1415
>>> print(d)
{’b’: 3.1415, ’a’: 1, ’c’: ’salut’}
I Pas de problème de dépassement d’indice
>>> d[99] = [1, 2, 3, ’nous irons. . .’]
>>> print(d)
{99: [1, 2, 3, ’nous irons. . .’], ’b’: True, . . .
Dictionnaires vs. listes
I Objets itérables
>>> for cle in d:
. . . print(cle, ’->’, d[cle])
. . .:
99 -> [1, 2, 3, ’nous irons. . .’]
b -> 3.1415 a -> 1 c -> salut
I Peuvent être imbriqués
>>> d2 = {’type’: ’un dico’, ’contenu’: d, ’réponse’: [42]}
>>> print(d2)
{’contenu’: {99: [1, 2, 3, ’nous irons. . .’],
’b’: 3.1415,
’a’: 1,
’c’: ’salut’},
’réponse’: [42],
’type’: ’un dico’}
Les dictionnaires : opérations
d = {} Création
d = dict()
d = {’a’: 1, ...}
d[cle] Accès
d[cle1][cle2]
len(d) Taille
cle in d Test d’appartenance cle not in d
d[cle] = valeur Ajout ou modification del d[cle] Suppression
Les dictionnaires : méthodes
d.keys() Accès aux clés d.values() Accès aux valeurs
d.items() Accès aux paires(cle, valeur)
d.copy() Copie
d.clear() Vidange
d.get(cle, defaut) Accès avec valeur par défaut d.pop(cle) Retrait de valeur
d.update(d2) Mise à jour / fusion etc.
Un exemple
Comptage de lettres
def compte_lettres(chaine):
d = dict()
for car in chaine:
n = d.get(car, 0) d[car] = n + 1 return d
if __name__ == ’__main__’:
s = input()
print(compte_lettres(s))
Un autre exemple
Carte de visite
def affiche_carte(carte):
print("Bonjour,")
print("Je m’appelle", carte[’prenom’], carte[’nom’], end=’.\n’)
print("Je suis né en", carte[’annee’],
"sous", carte[’president’], end=’.\n’)
print("Mon adresse email est", carte[’email’], end=’.\n’)
if __name__ == ’__main__’:
carte = {’prenom’: ’Antoine’,
’president’: "Valéry Giscard d’Estaing",
’annee’: 1980,
’nom’: ’Meyer’,
’email’: ’<antoine.meyer@u-pem.fr>’}
affiche_carte(carte)