Dictionnaires - dict
¶
Un dictionnaire - type dict
- est un moyen de mémoriser des associations de la forme clé→valeur.
- Littéralement, un dictionnaire est de la forme
{clé1: val1, clé2: val2, ...}
- Les clés sont n’importe quelle valeur «primaire» ou non modifiable comme un entier, une chaîne, un tuple...
- Les valeurs correspondantes sont de type arbitraire.
- La longeur d’un dictionnaire est le nombre de couples clé→valeur qu’il contient
Opérations de base¶
Créer un dictionnaire «littéralement» -
{clé1: val1, clé2: val2, ...}
:>>> d = {"café": ":)", 0: ":(", "I": [1, 0]} >>> d # Noter que l'ordre d'insertion n'est pas conservé {0: ':(', 'I': [1, 0], 'café': ':)'}
Connaître le nombre des couples clé→valeur contenu -
len(dict)
:>>> len(d) >>> 3
Savoir si une clé appartient au dictionnaire -
cle in dict
:>>> "I" in d True >>> "Café" in d False
Savoir si une valeur est associée à une clé d’un dictionnaire -
val in dict.values()
:>>> d {0: ':(', 'I': [1, 0], 'café': ':)'} >>> ":-0" in d.values() False >>> ":)" in d.values() True
Récupérer la valeur associée à une clé -
dict[cle]
:>>> x = d["I"] >>> x [1, 0] >>> x[0] 1 >>> d["I"][0] # lire de droite à gauche: [0] premier élément de d["I"] c'est à dire [1, 0] 1 >>> d[0] # Une clé peut être un entier ':(' >>> d["Café"] # attention aux erreurs si la clé n'existe pas ! Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Café'
Modifier ou ajouter un couple clé→valeur -
dict[cle] = nouvelle_val
:>>> d {0: ':(', 'I': [1, 0], 'café': ':)'} >>> cle = "café" >>> d[cle] = "clop :-O" # la clé existe -> c'est une modification >>> d {0: ':(', 'I': [1, 0], 'café': 'clop :-O'} >>> d["J"] = [0, 1] # la clé n'existe pas, c'est un ajout >>> d # attention, les couples ne sont pas ordonnés! {0: ':(', 'I': [1, 0], 'J': [0, 1], 'café': 'clop :-O'}
Supprimer un couple clé→valeur -
del d[cle]
:>>> d = {"Python": "de la balle !"} >>> del d["Python"] >>> d {}
Parcourt d’un dictionnaire¶
Par les clés - chaque clé est récupérée successivement -
cle in dict
:>>> pts = {"A": [5, 3], "B": [-3, 5]} >>> for c in pts: ... print(c, "=>", pts[c]) ... A => [5, 3] B => [-3, 5]
Intégrale - Chaque couple est récupéré successivement -
cle, val in dict.items()
:>>> pts = {"A": [5, 3], "B": [-3, 5]} >>> for c, v in pts.items(): ... print("{}({};{})".format(c,v[0],v[1])) ... A(5;3) B(-3;5)
Par les valeurs - chaque valeur est récupérée successivement -
val in dict.values()
:>>> for coord in pts.values(): ... coord[1] -= 1 ... >>> pts {'A': [5, 2], 'B': [-3, 4]}
Autres opérations utiles¶
Création via
dict(...)
, en «compréhension» ou viazip(list1,list2)
:>>> # genre fonction >>> d = dict(prenom="bob", nom="l'eponge", age=4) >>> d {'nom': "l'eponge", 'age': 4, 'prenom': 'bob'} >>> # à partir d'une liste de tuple >>> l = [("prenom", "bob"), ("nom", "l'eponge"), ("age", 4)] >>> dict(l) {'nom': "l'eponge", 'age': 4, 'prenom': 'bob'} >>> # en «compréhension» >>> {x: x**2 for x in range(10) if x not in (0,1,5,8)} {2: 4, 3: 9, 4: 16, 6: 36, 7: 49, 9: 81} >>> # en zippant deux listes de même taille >>> z = zip(("a", "b", "c"), (0, 1, 2)) >>> dict(z) {'a': 0, 'c': 2, 'b': 1} >>> dict(zip(list("abcdefghijklmnopqrstuvwxyz"), range(26))) {'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, ...
Lecture «sécurisée» -
dict.get(cle[, defaut])
:>>> d = {"café": ":)", 0: ":(", "I": [1, 0]} >>> d.get("Café") # si «defaut» n'est pas précisé, retourne None lorsque la clé n'existe pas. >>> d.get("café") ':)' >>> d.get("Café", 5) # si la clé n'est pas trouvée, retourne defaut=5 5 >>> d.get("café", 5) # sinon, retourne la valeur associée. ':)'
Écriture «sécurisée» -
dict.setdefault(cle[, defaut])
:>>> d.setdefault("café", ":(") # pas de modification, la clé existe ! ':)' >>> d.setdefault("Café") # la valeur par défaut est None >>> d {0: ':(', 'I': [1, 0], 'Café': None, 'café': ':)'} >>> del d["Café"] >>> d.setdefault("Café", ':]') ':]' >>> d {0: ':(', 'I': [1, 0], 'Café': ':]', 'café': ':)'}
Récupérer et supprimer un couple -
dict.pop(cle[, defaut])
:>>> cles = [0, 'café', 'i'] >>> for c in cles: ... ret = d.pop(c, None) # defaut=None -> valeur renvoyée si la clé n'existe pas ... print(ret) ... :( :) None >>> d {'I': [1, 0], 'Café': ':]'} >>> d.pop('i') # si defaut est omis et que la clé n'existe pas -> erreur ! Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 0
Récupérer et supprimer un couple choisi «au hasard» -
dict.popitem()
:>>> # Utile pour parcourir «destructivement» un dictionnaire >>> d = {0: ':(', 'I': [1, 0], 'café': ':)'} >>> while len(d): # rappel: 0 -> False, tout autre entier -> True ... print("len(d) =", len(d)) ... cle, val = d.popitem() ... print(cle, "=>", val, "et len(d) =", len(d)) ... 0 => :( et len(d) = 2 I => [1, 0] et len(d) = 1 café => :) et len(d) = 0 >>> d # le dictionnaire est vide ! {}
Mettre à jour un dictionnaire à partir d’un autre -
dict.update()
:>>> d1 = {"A": (1,2), "B": (5, 3)} >>> majd = {"O": (0, 0), "B": (-5, -3)} >>> d1.update(majd) >>> d1 {'A': (1, 2), 'B': (-5, -3), 'O': (0, 0)}