Python Language Compréhensions du dictionnaire


Exemple

Une compréhension de dictionnaire est similaire à une compréhension de liste sauf qu'elle produit un objet dictionnaire au lieu d'une liste.

Un exemple de base:

Python 2.x 2.7
{x: x * x for x in (1, 2, 3, 4)}
# Out: {1: 1, 2: 4, 3: 9, 4: 16}

ce qui est juste une autre façon d'écrire:

dict((x, x * x) for x in (1, 2, 3, 4))
# Out: {1: 1, 2: 4, 3: 9, 4: 16}

Comme avec une compréhension de liste, nous pouvons utiliser une instruction conditionnelle dans la compréhension du dict pour produire uniquement les éléments dict répondant à certains critères.

Python 2.x 2.7
{name: len(name) for name in ('Stack', 'Overflow', 'Exchange') if len(name) > 6}  
# Out: {'Exchange': 8, 'Overflow': 8}

Ou, réécrit en utilisant une expression de générateur.

dict((name, len(name)) for name in ('Stack', 'Overflow', 'Exchange') if len(name) > 6)
# Out: {'Exchange': 8, 'Overflow': 8}

Commencer par un dictionnaire et utiliser la compréhension du dictionnaire comme filtre de paire clé-valeur

Python 2.x 2.7
initial_dict = {'x': 1, 'y': 2}
{key: value for key, value in initial_dict.items() if key == 'x'}
# Out: {'x': 1}

Changement de clé et valeur du dictionnaire (dictionnaire inversé)

Si vous avez un dict contenant des valeurs hashable simples (les valeurs en double peuvent avoir des résultats inattendus):

my_dict = {1: 'a', 2: 'b', 3: 'c'}

et vous vouliez échanger les clés et les valeurs, vous pouvez prendre plusieurs approches en fonction de votre style de codage:

  • swapped = {v: k for k, v in my_dict.items()}
  • swapped = dict((v, k) for k, v in my_dict.iteritems())
  • swapped = dict(zip(my_dict.values(), my_dict))
  • swapped = dict(zip(my_dict.values(), my_dict.keys()))
  • swapped = dict(map(reversed, my_dict.items()))
print(swapped)
# Out: {a: 1, b: 2, c: 3}
Python 2.x 2.3

Si votre dictionnaire est volumineux, envisagez d' importer des outils itert et d'utiliser izip ou imap .


Fusion de dictionnaires

Combinez les dictionnaires et remplacez éventuellement les anciennes valeurs par une compréhension imbriquée du dictionnaire.

dict1 = {'w': 1, 'x': 1}
dict2 = {'x': 2, 'y': 2, 'z': 2}

{k: v for d in [dict1, dict2] for k, v in d.items()}
# Out: {'w': 1, 'x': 2, 'y': 2, 'z': 2}

Cependant, le déballage du dictionnaire ( PEP 448 ) peut être préféré.

Python 3.x 3.5
{**dict1, **dict2}
# Out: {'w': 1, 'x': 2, 'y': 2, 'z': 2}

Remarque : les définitions de dictionnaires ont été ajoutées à Python 3.0 et transférées vers les versions 2.7+, contrairement aux interprétations de listes ajoutées en 2.0. Les versions <2.7 peuvent utiliser des expressions de générateur et le dict() pour simuler le comportement des définitions de dictionnaires.