Académique Documents
Professionnel Documents
Culture Documents
(adoptez un serpent !)
ADG
<dahirou.gueye@uadb.edu.sn>
2
Programmation Python
Chapitre 3:
Dictionnaires, Tuples et ensembles
3
Dictionnaires
Les types de données composites que nous avons abordés jusqu’à présent
(chaines, listes) étaient tous des séquences, c’est à dire des suites ordonnées
d’éléments.
Dans une séquence, il est facile d’accéder à un élément quelconque à l’aide
d’un index (un nombre entier), mais à la condition expresse de connaître son
emplacement.
Les dictionnaires que nous découvrons ici constituent un autre type composite.
Ils ressemblent aux listes dans une certaine mesure (ils sont modifiables
comme elles), mais ne sont pas des séquences.
En revanche, nous pourrons accéder à n’importe lequel d’entre eux à l’aide
d’un index spécifique que l’on appellera une clé́ , laquelle pourra être
alphabétique, numérique, ou même d’un type composite sous certaines
conditions.
4
Dictionnaires
Un tableau associatif qui fait correspondre des valeurs à des clefs : dict
dict = { clef1 : valeur1, clef2 : valeur2, … }
>>> définitions = {"os" : "système d'exploitation", "python" : "langage de
programmation", "dictionnaire" : "association clef-valeur"}
>>> fiche = {"nom":"Gueye","prenom":"Dahirou"}
>>> materiel = {}
>>> materiel['computer'] = 'ordinateur'
>>> materiel['mouse'] ='souris’
>>> materiel['keyboard'] ='clavier'
>>> print(materiel)
{'computer': 'ordinateur', 'keyboard': 'clavier', 'mouse': 'souris'}
5
Opérations sur les dictionnaires
La recherche est optimisée dans les dictionnaires (table de hachage)
Principales opérations :
§ Nombre de clés ou de valeur : len(definitions) -> 3
§ Obtenir la valeur associée à une clé: definitions["python"] -> langage de
programmation
§ Ajouter un couple de clé: valeur: definitions["flottant"] = "nombre décimal"
§ supprimer une clé et la valeur associée: del definitions["os"]
§ Test d’appartenance
>>> if "os" in definitions:
... print("Intègre un système")
... else:
... print("Pas de système. Sorry") ...
Pas de systèmes. Sorry 6
Opérations sur les dictionnaires
Récupérer une valeur dans un dictionnaire: get
>>> data = {"os": "systeme", "age": 30}
>>> data.get("os")
'système’
>>> data.get("adresse", "Adresse inconnue")
'Adresse inconnue'
Méthode keys()
>>> print(data.keys())
Vérifier la présence d'une clé : haskey
>>> data.has_key("os")
True
Méthode values()
>>> print(data.values())
7
Dictionnaires et boucles
Une boucle sur un dictionnaire parcourt les clefs :
for clef in définitions :
print(clef, " : ", définitions[clef])
Ou
for clef in définitions.keys(): print cle
Récupérer les valeurs
for valeur in définitions.values() :
print(valeur)
Récupérer les couples (clés:valuers)
for clef, valeur in définitions.items() :
print(clef, " : ", valeur)
Dictionnaire procédural :
quadruple = { i : 4 * i for i in range(10) } 8
Construction d’un histogramme à l’aide d’un
dictionnaire
9
Result
10
Remarques sur les clés
Peuplier
11
Les dictionnaires ne sont pas des séquences
12
Les dictionnaires ne sont pas des séquences
13
Contrôle du flux d’exécution à l’aide d’un dico
dico.get(materiau, fonctAutre)()
15
Tuples
Du point de vue de la syntaxe, un tuple est une collection d’éléments séparés
par des virgules :
Très proches des listes. La différence est qu’ils ne sont pas modifiables
Les tuples s'écrivent entre ou sans parenthèses
>>> triplet = (1, 2, 3)
>>> couple = (1, 2)
>>> tup = 'a', 'b', 'c', 'd', 'e'
>>> print(tup)
('a', 'b', 'c', 'd', 'e')
16
Tuples
Si un seul élément, il faut mettre une virgule après
>>> tuple_a_un_element = (1,)
Les parenthèses ne sont pas obligatoires
>>> mon_tuple = 1, 2, 3
Afficher une valeur d’un tuple
>>> mon_tuple[0]
1
17
Tuples
Les tuples ne sont pas modifiables
=> ils peuvent servir de clef dans les dictionnaires
C'est leur principale utilisation
Changement de valeur
>>> mon_tuple[1] = "ok"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
18
Tuples
Le tuple permet une affectation multiple
>>> v1, v2 = 11, 22
>>> v1
11
>>> v2
22
('Dahirou', 'Gueye') 19
Opérations sur les tuples
NB: Les opérations que l’on peut effectuer sur des tuples sont syntaxiquement
similaires à celles que l’on effectue sur les listes, si ce n’est que les tuples ne sont
pas modifiables :
>>> print(tup[2:4])
('c', 'd')
>>> tup[1:3] = ('x', 'y')
==> ***** erreur ! *****
20
Opérations sur les tuples
Les opérateurs de concaténation et de multiplication fonctionnent aussi. Mais
puisque les tuples ne sont pas modifiables, vous ne pouvez pas utiliser avec eux,
ni l’intruction del ni la méthode remove() :
>>> tu1, tu2 = ("a","b"), ("c","d","e")
>>> tu3 = tu1*4 + tu2
>>> tu3
('a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'c', 'd', 'e')
>>> for e in tu3:
... print(e, end=":")
...
a:b:a:b:a:b:a:b:c:d:e:
21
Opérations sur les tuples
>>> del tu3[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
22
Ensembles
Ensembles (set) au sens mathématique, proches des listes
Les ensembles ne sont pas ordonnés
Les doublons sont automatiquement enlevés des ensembles
Contrairement aux séquences comme les listes et les tuples dans lesquels
chaque élément est indexé
Les ensembles s'écrivent entre accolades
>>> {1, 1, 2, 3}
{1, 2, 3}
>>> {1, 1, 2, 3} == {2, 3, 1}
True
>>> my_set = {1.0, "Hello", (1, 2, 3)}
23
Ensembles
Les opérations ensemblistes sont disponibles, ex :
Exemple 1:
>>> {1, 2, 3}.intersection({2, 3, 4})
{2, 3}
Exemple2:
>>> s1 = set([4, 6, 9])
>>> s2 = set([1, 6, 8])
>>> s1.intersection(s2)
set([6])
Convertir une liste en ensemble : set([1, 2, 3])
24
Ensembles
Union: Somme des éléments de deux ensembles
>>> s1 = set([4, 6, 9])
>>> s2 = set([1, 6, 8])
>>> s1.union(s2)
set([1, 4, 6, 8, 9])
>>> s1 | s2
set([1, 4, 6, 8, 9])
25
Ensembles
Un "frozenset" (ensemble figé) se comporte comme un ensemble,
Sauf qu'il est immutable, c'est-à-dire qu'une fois créé, on ne peut
pas le mettre à jour
Il dispose donc des mêmes fonctions que le type "set", mais sans
"add", "update", "pop", "remove", "discard" et "clear".
This datatype supports methods like copy(), difference(),
intersection(), isdisjoint(), symmetric_difference() and union()
De plus, ils sont hachables, ce qui leur permet de faire partie
d'ensembles.
Ensemble immutable : frozenset([1, 2, 3]) (clef de dictionnaire)
26
Ensembles
>>> fs = frozenset([2, 3, 4])
>>> s1 = set([fs, 4, 5, 6])
>>> s1
set([4, frozenset([2, 3, 4]), 6, 5])
>>> fs.intersection(s1)
frozenset([4])
>>> fs.add(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
27
>>>