UVT : MASTER BADS
M 5
PYTHON
Les dictionnaires et les ensembles
Enseignante: Mme Lamia MANSOURI
Ann e universitaire: 2020-2021
1
1. Les tableaux associatifs
Un tableau associatif est un type de donn es permettant de stocker des couples (cle : valeur),
avec un acc s tr s rapide la valeur partir de la cl .
La cl ne peut tre pr sente quune seule fois dans le tableau.
Il poss de les caract ristiques suivantes :
Lop rateur dappartenance dune cl (in)
La fonction taille (len()) donnant le nombre de couples stock s;
Il est it rable (on peut le parcourir) mais il nest pas ordonn .
Python propose le type standard dict.
2
2. Les dictionnaires (dict)
Les cha nes, les listes et les tuples: - des suites ordonn es d l ments.
- On peut acc der un l ment quelconque laide dun index
Un dictionnaire en python est une sorte de liste mais au lieu d'utiliser des index , on utilise des
cl s alphanum riques.
Les dictionnaires mappent cl s en valeurs .
Comme les listes, les dictionnaires sont modiables.
La cl qui peut tre nimporte quel type non-modifiable (les cha nes,les nombres et les tuples
sils ne contiennent que des l ments non modifiables)
Syntaxe
Nom-Collection= {
Cle1 : valeur1,
cle2 :valeur2,
&
Clen :valeurn
}
Pour acc der la valeur du dictionnaire,
nous utilisons la syntaxe suivante:
nom_dictionnaire
3
Exemple
4
On veut cr er un dictionnaire de langue, pour la traduction de termes informatiques anglais
en fran ais.
dico = {} # cr ation dun dictionnaire vide
dico['computer'] = 'ordinateur'
dico['mouse'] ='souris'
dico['keyboard'] ='clavier'
print(dico)
#on aura ceci :
on aura ceci :
{'computer': 'ordinateur', 'mouse': 'souris, 'keyboard': 'clavier'}
print (dico['mouse]) # affiche souris
Autres exemples de cl
5
Consid rons par exemple que nous voulions r pertorier des sur un grand terrain rectangulaire.
Nous pouvons pour cela utiliser un dictionnaire, dont les cl s seront des tuples indiquant les
coordonn es x,y de chaque arbre :
arb = {}
arb[(1,2)] = 'Peuplier'
arb[(3,4)] = 'Platane'
arb[6,5] = 'Palmier'# on peut liminer les ()
arb[5,1] = 'Cycas'
arb[7,3] = 'Sapin'
print(arb[(6,5)])# affiche palmier
print(arb)
#on aura cet affichage :
#{(3, 4):'Platane',(6, 5):'Palmier',(5, 1):'Cycas',(1, 2):'Peuplier',(7, 3):'Sapin'}
Publicité
print(arb[1,2])# affiche Peuplier
print(arb[2,1]) # affiche Erreur : KeyError: (2, 1)
Pour r soudre cet erreur , on utilise la m thode get(). Le 1er argument transmis cette m thode est la cl de
recherche, 2 me argument est la valeur que nous voulons obtenir en retour si la cl nexiste pas dans le
dictionnaire :
print(arb.get((1,2), 'n ant)) # affiche Peuplier
print(arb.get((2,1), 'n ant)) # affiche n ant
Remarque
6
Les dictionnaires ne sont pas des s quences : Les l ments d'un dictionnaire ne sont pas dispos s dans
un ordre particulier. Des op rations comme la concat nation et l'extraction (d'un groupe d' l ments
contigus) ne peuvent donc tout simplement pas s'appliquer ici.
Si vous essayez tout de m me, Python l vera une erreur lors de l'ex cution du code :
print (arb[1:3])
Erreur : KeyError: slice(1, 3, None)
2.1 Op rations sur les dictionnaires
7
del
Pour enlever un l ment du dictionnaire on utiliser linstruction del
Exemple :
invent = {'pommes':430,'bananes': 312,'oranges':274,'poires': 137}
print(invent)
affiche {'oranges': 274, 'pommes': 430, 'bananes': 312, 'poires': 137}
del (invent['pommes'])
print (invent)
affiche {'oranges': 274, 'bananes': 312, 'poires': 137} I
len()
La fonction len() est utilisable avec un dictionnaire : elle en renvoie le nombre d' l ments.
2.2 Parcours d'un dictionnaire
8
On peut utiliser une boucle for pour parcourir un dictionnaire, mais au cours de l'it ration, ce sont les
cl s utilis es dans le dictionnaire qui seront successivement aect es la variable de travail, et non les
valeurs. L'ordre dans lequel les l ments seront extraits est impr visible.
Exemple :
for clef in invent:
print(clef, invent )
2.3 m thodes sur les dictionnaires
9
m thode
keys
values
items
description
renvoie la liste des cl s utilis es
dans le dictionnaire
renvoie la liste des valeurs
m moris es dans le dictionnaire
extrait du dictionnaire une liste
quivalente de tuples
exemple
print (dico.keys() )
affiche dict_keys['computer', 'keyboard', 'mouse']
print (dico.values())
#affiche dict_values ['ordinateur', 'clavier', 'souris']
print (invent.items())
#affiche[('oranges', 27), ('bananes', 312), ('poires',137)]
Update([ dict]) Mets jour le dictionnaire.
Il est possible de concat ner
deux dictionnaires avec cette
m thode.
Les doublons sont
automatiquement fusionn s.
Supprime tous les l ments du
dictionnaire.
clear()
Publicité
for key, value in invent.items():
print( "Cl :",key," | valeur :", value)
d={'apples':1,'oranges':3,'pears': 2}
ud = {'pears': 4,'grapes': 5, 'lemons': 6}
d.update(ud)
print(d)
{'grapes': 5, 'pears': 4, 'lemons': 6, 'apples': 1, 'oranges': 3}
2.3 m thodes sur les dictionnaires
10
m thode
copy
description
La m thode copy() permet
d'eectuer une vraie copie d'un
dictionnaire. Il faut savoir en
eet que la simple aectation
d'un dictionnaire existant une
nouvelle variable cr e
seulement une nouvelle
r f rence vers le m me objet, et
non un nouvel objet (aliasing).
exemple
invent = {'bananes':312,'oranges':274,'poires':137}
stock = invent
print (stock)
del(invent['bananes'])
print (stock)
#affiche{'oranges':27,'poires: 137}
#Si on modie "invent", alors stock aussi est modi ,
#et vice-versa car les deux r f rencent le m me objet
Avec copy
magasin = stock.copy()
magasin['prunes'] = 561
print (magasin)
#{'oranges':27,'prunes':561,'poires': 137}
print(stock )
#{'oranges': 274, 'poires': 137}
print (invent)
{'oranges': 274, 'poires': 137}
11
m thodera
description
pop( cl [, d]) Supprimez l' l ment avec "cl " et
renvoyez sa valeur ou "d" si "cl " est
introuvable. Si "d" n'est pas fourni et que
"key" n'est pas trouv , KeyError est lev e.
exemple
D={"prenom":"lamia", "ville":"rades", "age":20}
print(D) #{'prenom': 'lamia', 'ville': 'rades', 'age': 20}
print("val : ", D.pop('nom','inexistant)) # val : inexistant
print("pop : ",D)
pop : {'prenom': 'lamia', 'ville': 'rades', 'age': 20}
popitem()
Supprimer et renvoyer un l ment
arbitraire (cl , valeur). KeyError si le
dictionnaire est vide.
get( cl [, d]) Renvoie la valeur de la cl . Si la cl
D={"prenom":"lamia", "ville":"rades", "age":20}
n'existe pas, retourne d (la valeur par
d faut est None).
print(D.get("ville")) #rades
3. Les ensembles
12
Un ensemble est une collection it rable non ordonn e d l ments hachables uniques.
Cest la transposition informatique de la notion densemble math matique.
Publicité
En python, on trouve deux types densembles:
Le set qui est un objet modifiable
le frozenset qui est un objet immuable (le mot anglais frozen signifie gel en fran ais)
3.1 D clarer un set
Il y a deux mani res de d clarer un set.
" En utilisant des accolades.
s = { "anas", "lamia", "amine", "aziz"}
print(s) # affiche {lamia, aziz, anas, amine}
Notez bien quil sagit dun ensemble non ordonn ce qui explique que print() retourne les l ments
dans un ordre al atoire.
3. Les ensembles
13
Un ensemble est une collection it rable non ordonn e d l ments hashables uniques.
Cest la transposition informatique de la notion densemble math matique.
En python, on trouve deux types densembles:
Le set qui est un objet modifiable
le frozenset qui est un objet immuable (le mot anglais frozen signifie gel en fran ais)
3.1 D clarer un set
Il y a deux mani res de d clarer un set.
" En utilisant des accolades
s = { "anas", "lamia", "amine", "aziz"}
print(s) # affiche {'lamia', 'aziz', 'anas', 'amine'}
Notez bien quil sagit dun ensemble non ordonn ce qui explique que print() retourne les l ments
dans un ordre al atoire.
"
En transformant une liste en set gr ce au constructeur set()
14
s2 = set(["lamia", "lamia", (1,2,3), 7.56])
print(s2) # affiche {7.56, 'lamia', (1, 2, 3)}
Notez quon a d clar dans le set avec un doublon ('lamia') mais, celui-ci nest pas pris en compte
et ne l ve m me pas dexception. Au fait, le e set est une collection dobjets uniques.
Il nest pas possible de d clarer un ensemble vide avec la premi re m thode. Cela cr un
"
dictionnaire.
s = {}
print(type(s)) # affiche <class 'dict'>
Pour cr er un ensemble vide, pas dautre choix que dutiliser la deuxi me m thode.
s = set()
print(type(s)) #affiche <class 'set'>
3.2 Aper u de quelques op rations math matiques associ es aux sets
" Diff rence entre deux sets
s = {"amine", "aziz", "anas", "ahmed"}
s2 = {"amine", "anas"}
s3 = s - s2
print("s3 =", s3) # s3={'aziz, 'ahmed}
" Union de deux sets
s = {"Python", "php"}
s2 = {"java", "html"}
s3 = s | s2
print("s3 =", s3)# s3 = {'html', 'php', 'java', 'Python}
Intersection de deux sets
"
s = {"Python", "php"}
s2 = {"java", "php"}
s3 = s & s2
print("s3 =", s3) # s3= {'php'}
15
3.2 Quelques m thodes associ es aux sets
" Ajouter un l ment avec set.add()
s = {"amine", "anas", "aziz"}
s.add("lamia")
print(s)
#affiche {anas,aziz,amine,lamia}
" Ajouter tous les l ments dun autre set avec set.update()
s = {"amine", "ahmed", "Mohamed"}
Publicité
S2 = {1, 2, 3}
s.update(s2)
print("s =", s)
print("s2 =", s2)
s = {1, 2, 3, amine, ahmed, Mohamed}
s2 = {1, 2, 3}
Comme vous pouvez le constater, cette m thode rajoute les l ments de lensemble s2 dans
lensemble s sans pour autant vider lensemble s2.
16
Supprimer un l ment avec set.remove() et set.discard()
s = {"amine", "ahmed", "Mohamed", "aziz"}
s.remove("ahmed")
print(s)
{"amine", "ahmed", "Mohamed", "aziz"}
Attention! Avec set.remove(), Python l ve une exception si vous essayez denlever un l ment
qui nappartient pas au set.
s = {"amine", "ahmed", "Mohamed", "aziz"}
s.remove("salah")
print(s)
on aura KeyError: salah
Pour viter cela, utiliser la m thode set.discard() qui, elle, ne l vera pas dexception.
s = {"amine", "ahmed", "Mohamed", "aziz"}
s.discard("salah")
print(s) # {"amine", "aziz", "Mohamed", "ahmed"}
Vider un set avec la m thode set.clear()
s = {"amine", "ahmed", "Mohamed", "aziz"}
s.clear()
print("s =", s)# affiche s=set()
17
4. Les frozensets
18
Probl mes avec les ensembles
Les ensembles tant modifiables sont unhashable ils ne peuvent pas tre utilis s comme des
cl s de dictionnaires.
On ne peut pas mettre un set dans un autre.
Frozenset est une nouvelle classe qui pr sente les caract ristiques d'un ensemble, mais ses
l ments ne peuvent pas tre modifi s une fois affect s. les m thodes telles
que add() ou remove() ne peuvent pas leur tre applicables.
Les tuples sont des listes immuables, les frozensets sont des ensembles immuables.
Notez bien que frozenset() fonctionne galement avec un tuple ou une liste
D claration dun frozenset:
Les Frozensets peuvent tre cr s en utilisant la fonction frozenset().
19
Exemples
villes = set (["tunis", "B ja", "Nabeul"])
villes = frozenset (["tunis", "B ja", "Nabeul"])
villes.add ("Sousse")
villes.add ("Sousse")
print(villes) # affiche {'Sousse', 'B ja', 'tunis', 'Nabeul'}
print(villes)
AttributeError: 'frozenset' object has no attribute 'add'
tup = (1, 2, 3)
T_fr_s = frozenset(tup)
print(type(T_fr_s)) #<class 'frozenset>
#une fois d clar , un frozenset peut appartenir un set car il est devenu immuable
liste = [1, 2, 3]
fr_s = frozenset(liste)
print(type(fr_s)) # <class frozenset>
s = {fr_s, 4, 5}
print("s =", s)
#s = {5, frozenset({1, 2, 3}), 4}