Les dictionnaires et les ensembles

Programming · course

Voir tous les documents en programmation

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}