5 - Tuples, dictionnaires

Tuples et dictionnaires #

p-uplets #

  • En mathématiques on connait les “couples” de valeurs :

    Le point $A$ d’abscisse $3$, d’ordonnée $4$ se note $A(3;4)$.

  • Quand on dispose de $p$ données on parle de $p$-uplet.

    En anglais ça donne un “tuple”.

Les tuples en Python #

  • Dans Python les tuples sont des séries de données, séparées de virgules.
>>> un_tuple = (3, 4, 5)
>>> un_tuple[1] # comme pour une liste
4
>>> type(un_tuple)
<type 'tuple'>
>>> for x in un_tuple: # on peut itérer sur un tuple
      print(x**2)
9
16
25
>>> autre_tuple = ("pomme", 1, True)

Les tuples ne sont pas mutables ! #

>>> un_tuple[1] = 2 # changer un élément : NON

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Une fois un tuple défini il n’est plus possible de le transformer (non mutable).

utiliser les tuples ? #

  • C’est comme une liste, mais plus rapide et pas modifiable.

  • Pratique quand on sait qu’une liste de valeur ne changera plus.

Tuples et fonctions #

  • Une fonction peut renvoyer un tuple
>>> def f(x, y):
      return x**2, y**3
>>> f(3, 2)
(9, 8)

p-uplet nommés #

  • Remarque importante : ici le programme officiel de la spécialité NSI est imprécis :

    “En Python, les p-uplets nommés sont implémentés par des dictionnaires.”

  • C’est faux. Les dictionnaires en Python sont des objets particuliers et les “p-uplets nommés” sont implémentés par des namedtuples auxquels on accède via la librairie “collections”

  • Je présenterai donc les dictionnaires en Python et pas les namedtuples en Python

    Nous parlerons toujours de dictionnaires et jamais plus de p-uplets nommés. Les idées dont nous avons besoin sont les mêmes.

et donc : les dictionnaires en Python #

Les dictionnaires sont des “tableaux associatifs” indexés par des clés

>>> scores = {"Jean": 145, "Paul": 200, "Emy": 345 }
>>> scores["Emy"] = 364
>>> scores
{"Jean": 145, "Paul": 200, "Emy": 364 }
>>> del scores["Paul"]
>>> scores["Téo"] = 308
>>> scores
{"Jean": 145, "Emy": 364, "Téo": 308}

Les dictionnaires sont mutables. On accède à une valeur à l’aide de sa clé

Element d’un dictionnaire, conversions, tris #

On peut tester l’appartenance, trier ou convertir un dictionnaire :

>>> scores = {"Jean": 145, "Emy": 364, "Téo": 308}
>>> "Jean" in scores
True
>>> list(scores)
["Jean", "Emy", "Téo"] # extraire la liste des clés
>>> sorted(scores)
["Emy", "Jean", "Téo"] # liste triée des clés

Dictionnaires par compréhension #

On peut créer de plusieurs manières un dictionnaire par compréhension :

Par exemple, pour stocker les valeurs d’une fonction :

>>> {x: x**2 for x in  (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

On via une série d’associations :

>>> Quentin = dict(age=71, taille=180, poids=150)
>>> Quentin
{'age': 71, 'taille': 180, 'poids': 150}

Et avec zip :

>>> dict(zip(["x", "y", "z"], [18, 25, 32]))
{"x": 18, "y": 25, "z": 32}

Itérer dans un dictionnaire #

On peut itérer dans un dictionnaire et récupérer les clés et les valeurs :

>>> persos = {'Robert': 'le musclé',
'Nadine': 'la rusée'}
>>> for key, value in persos.items():
        print(key, value)
Robert le musclé
Nadine la rusée

Clés et valeurs #

On peut aussi itérer sur la liste des clés ou des valeurs :

>>> ingredients = {'poules': 2, 'coqs':4,
'cochons': 8}
>>> for x in ingredients.keys():
        print(x)
'poules'
'coqs'
'cochons'
>>> for y in ingredients.values():
        print(y)
2
4
8