fgallaire : La compréhension de dictionnaire en Python
samedi 5 octobre 2013 à 04:49La compréhension de liste est une syntaxe moderne remplaçant les classiques fonctions map()
et filter()
de la programmation fonctionnelle. Ce sucre syntaxique est devenu un standard de la programmation moderne présent dans quasiment tous les langages.
La PEP 202, en intégrant cette fonctionnalité dans Python 2.0, n’était donc pas d’une originalité folle. Mais les développeurs de Python ne se sont pas arrêtés en si bon chemin, et ils ont eu l’intelligence de pousser le concept un peu plus loin. Ainsi, ils ont cherché à étendre la syntaxe de compréhension aux autres types conteneurs que les listes, c’est-à-dire en premier lieu aux dictionnaires.
La PEP 274 visait donc a intégrer la compréhension de dictionnaire à Python 2.3, mais elle a été abandonnée car considérée comme inutile au vu de l’utilisation conjointe des expressions de générateur et du constructeur dict()
.
Cependant, l’intérêt pour ce sucre syntaxique est resté présent, et la compréhension de dictionnaire a finalement été intégrée au langage à l’occasion de la grande réforme du passage à Python 3.0, et backportée dans Python 2.7.
On obtient ainsi plus de lisibilité :
>>> dict((i,i*2) for i in range(5))
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
>>> {i: i*2 for i in range(5)}
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
et de flexibilité :
>>> k_and_v = [[1, 'a'], [2, 'b']]
>>> dict(k_and_v)
{1: 'a', 2: 'b'}
>>> {k: v for k, v in k_and_v}
{1: 'a', 2: 'b'}
>>> {k+1: v*2 for k, v in k_and_v}
{2: 'aa', 3: 'bb'}
Et puisque Python 3.0 a doté les sets
d’une nouvelle syntaxe, il en a aussi profité pour les doter de la compréhension :
>>> [i%2 for i in range(8)] # liste
[0, 1, 0, 1, 0, 1, 0, 1]
>>> {i%2 for i in range(8)} # set
{0, 1}
Il n’est pas étonnant que la syntaxe de compréhension de liste se soit diffusée dans tous les langages de programmation modernes. Il n’est pas étonnant non plus que Python, un langage doté d’une philosophie très sensible à la lisibilité, soit allé plus loin en la généralisant à tous ses types conteneurs, en faisant un élément central du langage.
Original post of fgallaire.Votez pour ce billet sur Planet Libre.
Articles similaires
- fgallaire : La syntaxe des sets en Python (14/03/2013)
- Antoine Millet : Programmation avec Curses en Python (20/04/2009)
- theClimber : Créer une calculette en notation post-fixée (30/11/2010)
- Marco : Accéder à des services web en Python (24/02/2011)
- ®om : Résoudre le cube-serpent en Python (27/09/2011)