Résumé 27 - STOCKER ET COMPTER AVEC UN DICTIONNAIRE
Lien vers l'activité : Stocker et compter avec un dictionnaire
Dernière modif. : 05 12 2020
16.1 Dictionnaire
A - Créer un dictionnaire
1 | dicoFR_AN = {'encodage' : "encoding", 'cryptage' : "encryption"}
|
Pour plus de clarté, on pourrait taper le code ainsi :
1
2
3
4 | dicoFR_AN = {
'encodage' : "encoding",
'cryptage' : "encryption"
}
|
B - Nombre de couples clé-valeur
On utilise la fonction len comme avec les tableaux ou les strings.
>>> mon_dico = {'encodage' : "encoding", 'cryptage' : "encryption"}
>>> nbr = len(mon_dico)
>>> nbr
2
C - Rajouter ou mettre à jour un couple clé-valeur
>>> mon_dico['balise'] = "tag"
>>> mon_dico
{'encodage': 'encoding', 'cryptage': 'encryption', 'balise': 'tag'}
D - Accès aux valeurs avec la clé
>>> mon_dico['boucle']
'loop'
E - Mutable
Les dictionnaires sont mutables : on peut modifier le contenu sans avoir à recréer un nouveau dictionnaire. On peut donc garder le même identifiant.
Transmettre un dictionnaire via un paramètre le rend donc modifiable par effet de bord.
F - Test d'existence d'une clé (avant lecture, pour éviter une levée d'exception)
>>> 'boucle' in mon_dico
True
>>> 'toto' in mon_dico
False
Attention, avec un dictionnaire, on teste la clé, pas la valeur. Pour être plus explicite, on a accès à cette syntaxe, plus claire mais plus longue : ::python >>> 'boucle' in mon_dico.keys() True >>> 'toto' in mon_dico.keys() False
G - Exemple de fonction-test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | def incrementer(leDict, laCle) :
'''Fonction qui renvoie True si la clé existe déjà et l'incrémente.
Sinon, elle renvoie False et crée une valeur associée de 0
:: param leDict(dic) :: le dictionnaire sur lequel on veut agir
:: param laCle(?) :: la clé qu'on veut tester
:: return (bool) :: True si leDict[laCle] existe
:: exemples ::
>>> nbr_lettres = {'a':45, 'b':12, 'd':5}
>>> incrementer(nbr_lettres, 'z')
False
>>> nbr_lettres
{'a': 45, 'b': 12, 'd': 5, 'z': 1}
'''
if laCle in leDict.keys() :
leDict[laCle] = leDict[laCle] + 1 # ou leDict[laCle] += 1
return True
leDict[laCle] = 1 # return ligne 18 : si on arrive ici c'est que c'est faux
return False
comptesLettres = {'a':1, 'b':20, 'c':300}
if __name__ == '__main__' :
import doctest
doctest.testmod()
|
16.2 Fichier Texte
-
Il faut ouvrir le fichier avec la fonction open.
-
l'argument 'r' (read) signale qu'on ne donne qu'un accès lecture : on ne pourra pas le modifer.
-
l'argument 'w' (write) signalerait qu'on ne donne qu'un accès écriture : on détruit le contenu précédent et on écrit un nouveau fichier.
-
l'argument 'a' (append) signalerait qu'on ne donne qu'un accès rajout : on écrit à la suite du contenu précédent. Si le fichier n'existe pas, il sera créé.
-
l'argument nommé encoding permet de signaler quelle technique d'encodage/décodage des octets utilisés. Ici, il s'agit du standard actuel 'utf-8'.
-
la méthode close permet ensuite de fermer le fichier. Comme d'habitude avec les méthodes, on a le NOM de l'objet, suivi d'un POINT, suivi du nom de la METHODE. Mal fermer un fichier peut poser problème. Voir la méthode with ... as sinon.
Voici un exemple qui extrait une par une les lignes d'un fichier. Pour chacun des lignes, on affiche ensuite les caractères un par un.
1
2
3
4
5
6
7 | monFichier = open('dunwich_horror-lovecraft.txt', 'r', encoding='utf-8')
for ligne in monFichier :
for caractere in ligne :
print(caractere)
monFichier.close()
|
16.3 Compléments sur les strings
A - Chaînes constantes déjà présentes dans Python
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~'
B - Quelques méthodes des strings
Attention, puisque les strings sont non mutables, ces méthodes ne TRANSFORMENT pas le string. Elles renvoient un nouveau string qu'il faut éventuellement stocker dans une variable portant le même nom.
-
Mettre en minuscules :
caractere.lower()
-
Mettre en majuscules :
caractere.upper()
-
Tester la présence d'un caractère ou séquence dans une chaine :
if sequence in chaine_totale :
-
Remplacer tous les caractères d'un string par un autre :
!
ena
:a = a.replace('!', 'a')
- suppression des passages à la ligne (code 10 en ASCII) :
a = a.replace('\n', ' ')
- suppression des retour-chariots (code 13 en ASCII) :
a = a.replace('\r', ' ')
C Transformation d'un string en tableau en précisant un SEPARATEUR (ici les espaces) :
>>> a = "Hello, it's a small world !\n"
>>> tableau_mots = a.split(' ')
>>> tableau_mots
['Hello,', "it's", 'a', 'small', 'world', '!\n']