Aller au contenu

Parcourir un dictionnaire

Attention

Il n'y a pas d'ordre dans un dictionnaire.
Le parcours d'un dictionnaire ne se fera pas nécessairement dans l'ordre dans lequel les associations « clef: valeur » ont été entrées, ni dans un quelconque autre ordre.

Parcours par les clefs

On parcourt les clefs d'un dictionnaire nommé dico avec for ... in dico.keys() :

>>> d = {'chemise': 4, 'pantalon': 2, 'short': 3}

>>> for clef in d.keys():
...     print(clef, d[clef])
... 
chemise 4
pantalon 2
short 3
Remarque importante

On pourrait, comme avec un tuple ou un tableau, utiliser l'instruction suivante :

>>> d = {'chemise': 4, 'pantalon': 2, 'short': 3}

>>> for clef in d:
...     print(clef, d[clef])
... 
chemise 4
pantalon 2
short 3
Cependant, avec les tuples ou les tableaux, l'instruction for ... in ... parcourt les valeurs, pas les indices.
Le comportement peut donc tromper dans le cas des dictionnaires et il est conseillé d'utiliser la méthode .keys().

Parcours par les valeurs

Pour parcourir les valeurs d'un dictionnaire, on utilise la méthode .values() à la place de .keys():

>>> d = {'chemise': 4, 'pantalon': 2, 'short': 3}

>>> for valeur in d.values():
...     print(valeur)
... 
4
2
3

Parcours par les clefs et les valeurs

On peut obtenir les associations « clef: valeur » avec la méthode .items():

>>> d = {'chemise': 4, 'pantalon': 2, 'short': 3}

>>> for clef, valeur in d.items():
...     print(clef, valeur)
... 
chemise 4
pantalon 2
short 3

Exemple

Définir la fonction compte_carac() qui prend en paramètre une chaîne de caractères et qui renvoie un dictionnaire dont les clefs sont les caractères distincts de la chaîne et les valeurs associées sont les occurrences de ces caractères dans la chaîne.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def compte_carac(texte):
    """
    texte – str, chaîne de caractères
    Sortie: dict – clefs, les caractères distinct de texte
                   valeurs, occurrence des clefs dans texte
    >>> compte_carac('exemple')
    {'e': 3, 'x': 1, 'm': 1, 'p': 1, 'l': 1}
    """
    pass


##----- Tests et Programme Principal -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()

    # test supplémentaire
    # extrait de https://histoire-informatique.org/
    Lee = """
    Tim BERNERS-LEE (jun 1955-)
    Afin d'aider à la diffusion des informations, 
    ce chercheur du CERN de Genève a mis au point, en 1990, le World Wide Web. 
    Il est à l'origine de standards parmi les plus utilisés comme HTTP, URL, et le langage HTML.
    """   
Une aide

Contrairement à l'exemple sur les voyelles, les clefs dépendent cette fois-ci du paramètre.
On ne peut donc pas définir a priori les clefs du dictionnaire.

On procédera selon l'algorithme suivant :

dico = {}

Pour chaque caractère du texte:
    Si le caractère n'est pas encore une clef :
        dico[clef] = 1
    Sinon :
        incrémenter dico[clef]
Une solution
def compte_carac(texte):
    """
    texte – str, chaîne de caractères
    Sortie: dict – clefs, les caractères distinct de texte
                   valeurs, occurrence des clefs dans texte
    >>> compte_carac('exemple')
    {'e': 3, 'x': 1, 'm': 1, 'p': 1, 'l': 1}
    """
    nb_carac = {}
    for caractere in texte:
        if caractere not in nb_carac.keys():
            nb_carac[caractere] = 1
        else:
            nb_carac[caractere] += 1
    return nb_carac


##----- Tests et Programme Principal -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()

    # test supplémentaire
    # extrait de https://histoire-informatique.org/
    Lee = """
    Tim BERNERS-LEE (jun 1955-)
    Afin d'aider à la diffusion des informations, 
    ce chercheur du CERN de Genève a mis au point, en 1990, le World Wide Web. 
    Il est à l'origine de standards parmi les plus utilisés comme HTTP, URL, et le langage HTML.
    """
    print(compte_carac(Lee))