Aller au contenu

Clefs et valeurs

A retenir

Dans un dictionnaire :

  • une valeur peut être présente plusieurs fois ;
  • chaque clef est présente une unique fois.

Clefs d'un dictionnaire

La clef correspond à l'indice dans un tableau ou un tuple : c'est le nom de l'élément dans le dictionnaire. Deux associations ne peuvent donc pas avoir la même clef :

>>> d = {'chapeau': 3, 'pantalon': 6, 'chemise': 5, 'chapeau': 2}

>>> d
{'chapeau': 2, 'pantalon': 6, 'chemise': 5}

Lorsqu'on utilise une seconde fois la même clef, on redéfinit en fait la valeur associée à cette clef :

>>> d = dict()

>>> d['a'] = 3

>>> d['b'] = 42

>>> d
{'a': 3, 'b': 42}

>>> d['a'] = 666

>>> d
{'a': 666, 'b': 42}

Nature des clés

Les clefs doivent être de type immuable.
En pratique, on utilise des entiers, des chaînes de caractères ou encore des tuples (mais on ne peut utiliser des listes Python par exemple, elles sont muables).

Valeurs d'un dictionnaire

Les exemples précédents l'ont déjà montré : un dictionnaire est muable.
On peut modifier les valeurs associées aux clefs d'un dictionnaire : celui-ci reste le même objet.

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

>>> id(d)
140618820700704

>>> d['pantalon'] += 1

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

>>> id(d)
140618820700704

Exemple

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

Testez ensuite cette fonction avec le texte proposé.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def compte_chiffres(texte):
    """
    texte – str, chaîne de caractères
    Sortie: dict – les clefs sont les chiffres
                   les valeurs sont leur occurrence dans texte
    >>> compte_chiffres('16546132181683216132')
    {'0': 0, '1': 6, '2': 3, '3': 3, '4': 1, '5': 1, '6': 4, '7': 0, '8': 2, '9': 0}
    """
    pass


##----- Tests et Programme Principal -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Une solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
def compte_chiffres(texte):
    """
    texte – str, chaîne de caractères
    Sortie: dict – les clefs sont les chiffres
                   les valeurs sont leur occurrence dans texte
    >>> compte_chiffres('16546132181683216132')
    {'0': 0, '1': 6, '2': 3, '3': 3, '4': 1, '5': 1, '6': 4, '7': 0, '8': 2, '9': 0}
    """
    nb_chiffres = {'0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0}
    for lettre in texte:
        if lettre in '0123456789':
            nb_chiffres[lettre] += 1
    return nb_chiffres


##----- Tests et Programme Principal -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Une autre solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
def compte_chiffres(texte):
    """
    texte – str, chaîne de caractères
    Sortie: dict – les clefs sont les chiffres
                   les valeurs sont leur occurrence dans texte
    >>> compte_chiffres('16546132181683216132')
    {'0': 0, '1': 6, '2': 3, '3': 3, '4': 1, '5': 1, '6': 4, '7': 0, '8': 2, '9': 0}
    """
    chiffres = '0123456789'
    nb_chiffres = {carac: 0 for carac in chiffres}
    for lettre in texte:
        if lettre in '0123456789':
            nb_chiffres[lettre] += 1
    return nb_chiffres


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