Comment inverser un dictionnaire Python

Rayven Esplanada 30 janvier 2023
  1. Utilisez items() pour inverser un dictionnaire en Python
  2. Utilisez collections.defaultdict() pour inverser un dictionnaire en Python
Comment inverser un dictionnaire Python

Cet article montre différentes méthodes pour inverser un dictionnaire en Python.

L’inversion d’un dictionnaire est différente de l’inversion d’une liste, elle signifie inverser ou changer les éléments de clé et de valeur du dictionnaire, essentiellement en les échangeant pour n’importe quel but pour lequel le développeur pourrait l’utiliser.

Utilisez items() pour inverser un dictionnaire en Python

Les dictionnaires Python ont une fonction intégrée appelée items() qui retourne un objet itérable qui affichera les paires clé-valeur des dictionnaires sous la forme d’un tuple.

Par exemple, déclarer un dictionnaire de catégories aléatoires et l’imprimer en utilisant items().

dct = {
    "Animal": "Dog",
    "Fruit": "Pear",
    "Vegetable": "Cabbage",
    "Tree": "Maple",
    "Flower": "Daisy",
}

print(dct.items())

Production :

dict_items([('Animal', 'Dog'), ('Fruit', 'Pear'), ('Vegetable', 'Cabbage'), ('Tree', 'Maple'), ('Flower', 'Daisy')])

L’impression d’un dictionnaire en utilisant items() produira une liste itérable de n-uplets que nous pouvons manipuler en utilisant la boucle for pour les dictionnaires.

Inversez les paires clé-valeur en bouclant le résultat de items() et en changeant la clé et la valeur.

dct = {v: k for k, v in dct.items()}
print(dct)

Le k et le v dans la boucle for représentent respectivement la clé et la valeur. Les v: k sont les caractères de remplacement pour la clé et la valeur dans chaque itération, bien que nous fixions la valeur précédente v comme nouvelle clé et la clé précédente k comme nouvelle valeur.

Production :

{'Dog': 'Animal', 'Pear': 'Fruit', 'Cabbage': 'Vegetable', 'Maple': 'Tree', 'Daisy': 'Flower'}

Les éléments clé et valeur sont maintenant inversés dans la sortie.

Clés de même valeur dans un dictionnaire inversé

Un autre exemple de scénario d’inversion d’un dictionnaire est celui où il y a plusieurs clés ou valeurs ayant la même valeur. Il s’agit d’un scénario plus probable d’inversion d’un dictionnaire.

Par exemple, un dictionnaire des animaux préférés des gens.

favAnimal = {
    "John": "Dog",
    "Jane": "Cat",
    "Jerome": "Lion",
    "Jenny": "Dog",
    "Jared": "Giraffe",
    "James": "Dog",
}

Si le dictionnaire est inversé à l’aide du code ci-dessus, le résultat ne sera pas celui auquel vous vous attendez.

favAnimal = {v: k for k, v in favAnimal.items()}
print(favAnimal)

Production :

{'Dog': 'James', 'Cat': 'Jane', 'Lion': 'Jerome', 'Giraffe': 'Jared'}

Ici, 2 éléments du dictionnaire original sont manquants car chaque fois qu’une touche ou une valeur se répète dans la boucle, l’enregistrement existant sera écrasé.

Le dictionnaire contient 3 personnes avec la paire de valeurs Dog mais seul James a été copié car c’était le dernier enregistrement avec la valeur Dog et a écrasé les 2 autres éléments du dictionnaire.

Pour résoudre ce problème, il faudrait stocker les valeurs dans une liste afin qu’elles soient attribuées à une seule clé.

L’exemple de code complet :

favAnimal = {
    "John": "Dog",
    "Jane": "Cat",
    "Jerome": "Lion",
    "Jenny": "Dog",
    "Jared": "Giraffe",
    "James": "Dog",
}

favAnimal = {v: k for k, v in favAnimal.items()}

print(favAnimal)

Utilisez collections.defaultdict() pour inverser un dictionnaire en Python

Le module collections a une fonction defaultdict() qui peut manipuler les valeurs dans un dictionnaire en Python.

La fonction defaultdict() est principalement utilisée pour créer des valeurs par défaut de clés inexistantes. Si vous accédez à une clé inexistante, elle peut déclarer une valeur par défaut pour celle-ci, même si elle n’existe pas.

Cette fonction est utile dans notre cas car nous voulons instancier un nouveau dictionnaire avec des valeurs qui sont de type liste de données.

En utilisant le même exemple favAnimal, inverser le dictionnaire et convertir les valeurs en une liste.

Tout d’abord, initialisez le nouveau dictionnaire en utilisant defaultdict().

from collections import defaultdict

favAnimal_inverted = defaultdict(list)

Ensuite, utilisez la liste de compréhension pour l’inversion et stockez les valeurs inversées dans le nouveau dictionnaire.

{favAnimal_inverted[v].append(k) for k, v in favAnimal.items()}

Enfin, puisque defaultdict() crée une sorte de sous-classe d’un dictionnaire, reconvertissez-le au type de dictionnaire de base en l’enveloppant dans dict().

result = dict(favAnimal_inverted)
print(result)

Production :

{'Dog': ['John', 'Jenny', 'James'], 'Cat': ['Jane'], 'Lion': ['Jerome'], 'Giraffe': ['Jared']}

John, Jenny, et James sont maintenant sur la même liste avec la clé Dog au lieu que les autres éléments soient écrasés par le dernier élément qui avait Dog comme valeur.

L’exemple de code complet :

from collections import defaultdict

favAnimal_inverted = defaultdict(list)
result = dict(favAnimal_inverted)
print(result)

En résumé, utilisez items() pour boucler le dictionnaire et inverser les clés et les valeurs. Si par hasard votre ensemble de données est susceptible d’avoir des doublons, alors assurez-vous de convertir les valeurs en une liste en utilisant defaultdict() et manipulez-la de manière à ce que les valeurs du dictionnaire s’ajoutent à la liste au lieu de remplacer les valeurs existantes.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Article connexe - Python Dictionary