Python >> Tutoriel Python >  >> Python

Comment inverser/inverser un mappage de dictionnaire

En Python, un dictionnaire est une implémentation d'une structure de données connue le plus souvent sous le nom de tableau associatif.

Cette collection de paires clé-valeur mappe la clé à la valeur associée qui peut être implémentée de plusieurs façons, depuis la connaissance du prix des pommes et des pois à mettre dans l'application d'épicerie utilisée sur votre téléphone jusqu'à vouloir savoir lequel L'équipe de la Ligue majeure de baseball appartient à quel État ! C'est un moyen polyvalent de trouver les informations dont vous avez besoin, il est mutable, dynamique et peut être imbriqué ! Accéder aux valeurs dans un dictionnaire signifie que vous devez avoir la clé pour que la valeur appropriée soit imprimée.

Problème :Il y a des moments, cependant, où vous aurez besoin d'avoir l'inverse du dictionnaire. Vous devrez non seulement mettre la dernière paire clé-valeur dans le premier index, mais vous devrez inverser les paires valeur et clé à l'intérieur du dictionnaire !

Aussi difficile que cela puisse paraître, c'est en fait assez simple et nous allons passer par 3 solutions différentes sur la façon dont cela peut être fait, je votre code avec une explication sur chaque étape. Je vais écrire 3 morceaux de code distincts qui vous montreront comment cela peut être fait avec divers éléments de données qui peuvent être utilisés pour inverser un mappage de dictionnaires.

Dans ce premier exemple, je vais utiliser un dictionnaire de tous les jours pour les prix des fruits au supermarché local. Je vais utiliser une boucle for pour parcourir mon dictionnaire et changer les valeurs avec leurs clés respectives. Tout d'abord, sachez quelles données vous allez utiliser. Dans ce cas, nous obtenons les prix de fruits à placer dans notre tableau associatif. Je vais utiliser les fruits comme clés et les prix comme valeurs.

for_sale = {'Apple': 0.69, 'Coconut': 1.69, 'Tangerine': 0.75, 'Banana': 1.25}

Eh bien c'est super ! Nous avons nos clés et leurs prix stockés dans notre dictionnaire for_sale . Il est maintenant temps de faire un nouveau vide dictionnaire dans lequel placer les nouvelles clés et valeurs !

new_sale = {}

Il est maintenant temps de parcourir le dictionnaire et d'inverser les clés et les valeurs ! Nous allons utiliser une boucle for !

for key, value in for_sale.items():
    new_sale[value] = key

Exécutons le nouveau dictionnaire !

print(new_sale)

Voici le nouveau résultat !

{0.69: 'Apple', 1.69, 'Coconut', 0.75:'Tangerine', 1.25:'Banana'}

Maintenant, rassemblons tout le code !

for_sale ={'Apple': 0.69, 'Coconut': 1.69,'Tangerine': 0.75, 'Banana': 1.25}
new_sale = {}

for key, value in for_sale.items():
    new_sale[value] = key

print(new_sale)
# {0.69: 'Apple', 1.69: 'Coconut', 0.75: 'Tangerine', 1.25: 'Banana'}

Là! C'est tout ce qu'il a fallu! Il s'agit d'un moyen simple de 8 lignes pour y parvenir. L'expression nouvelle_vente[valeur] =clé , a fait tout le travail acharné pour vous ! Veuillez noter que cela ne trie pas votre dictionnaire! Il inverse uniquement la clé et les valeurs autour ! En partant du haut de notre code, nous pouvons voir que notre dictionnaire a les fruits dans les clés et les prix dans les valeurs. Nous avons créé une liste vide pour placer le nouveau dictionnaire. Après avoir parcouru le dictionnaire, nous avons changé les paires de clé et de valeur pour chaque instance d'une paire. Nous avons ensuite demandé au dictionnaire de fonctionner avec son nouveau nom. Le nouveau dictionnaire a maintenant les prix comme les clés et les fruits que les valeurs ! Il y a cependant un petit problème avec ces 8 petites lignes de code. Aussi beau que cela fonctionne, c'est désordonné et vous marque comme un débutant.

En Python, on veut du beau code pythonic facile à appréhender et qui ne prend pas trop de lignes dans notre code d'autant plus qu'il suffit de changer autour des paires clé-valeur ! Ainsi, la meilleure chose à utiliser est une approche de compréhension du dictionnaire. Savoir travailler un dictionnaire de manière exhaustive est non seulement un témoignage de vos compétences, mais vous facilitera également la tâche lorsque vous souhaitez insérer quelques lignes de code pour apporter une correction sans avoir à réécrire des parties de votre code. Qu'est-ce que la compréhension du dictionnaire, vous demandez-vous peut-être ? Eh bien, c'est une fonctionnalité très utile si vous souhaitez construire un dictionnaire en une seule ligne de code ! Cela réduit votre dictionnaire à une seule ligne, économisant de l'espace et de la mémoire dans votre code. Utilisation du {key:value} en mappant directement à partir d'un objet itérable, comme une liste, nous pouvons construire notre dictionnaire, même utiliser des instructions conditionnelles !

Dans cet exemple suivant, nous allons utiliser un one-liner pour faire ce que nous avons fait ci-dessus. Cette fois, nous allons utiliser l'animalerie et découvrir les prix de quelques petits animaux à acheter ! Nous allons utiliser les animaux de compagnie comme clés et les prix à nouveau pour les valeurs.

small_pets = {'Goldfish':0.50, 'Gerbil':1.0, 'Parakeet':2}

Dans la ligne suivante, j'utiliserai une approche globale du dictionnaire pour inverser les valeurs des clés :

inverted_pets = {values: key for key, value in dict.items(small_pets)}

Ensuite, j'imprimerai le nouveau dictionnaire :

print(inverted_pets)

Et mon résultat est :

inverted_pets = {0.5:'Goldfish', 1.0:'Gerbil', 2:'Parakeet'}

Passons maintenant à cette étape par étape. J'ai créé un dictionnaire appelé small_pets . Ensuite, j'ai créé un nouveau dictionnaire, inverted_pets et en même temps lui a demandé de parcourir chaque élément du dictionnaire et de changer les valeurs des clés du dictionnaire small_pets . Sur la ligne suivante, je lui ai demandé d'imprimer le nouveau dictionnaire. Maintenant, pour tout assembler !

small_pets = {'Goldfish':0.50, 'Gerbil':1.0, 'Parakeet':2}
inverted_pets = {values: key for key, value in dict.items(small_pets)}

print(inverted_pets)
# Outcome: {0.5:'Goldfish', 1.0:'Gerbil', 2:'Parakeet'}

Lorsque vous utilisez cette méthode, n'oubliez pas de transmettre l'argument dans le nouveau dictionnaire. Sans cela, votre programme se cassera et vous obtiendrez une erreur vous indiquant que dict.items() prend un argument de position et il n'y en a pas. Maintenant, ce morceau de code est beaucoup plus propre que le premier que nous avons écrit ! Il a fallu 5 lignes de moins que le code précédent et il fait toujours le travail ! C'est la marque de fabrique d'un Pythonier qui sait ce qu'il fait dans le monde réel ! Comme vous pouvez le voir ici encore, cette méthode ne trie pas le dictionnaire, mais inverse simplement l'ordre des paires clé-valeur. Pourtant, une troisième façon, pour atteindre votre objectif d'inverser une valeur pour sa clé dans un dictionnaire, est de 3 lignes !

small_pets = {'Goldfish':0.69, 'Gerbil':1.5, 'Parakeet':2}
d = {v:[i for i in small_pets.keys() if small_pets[i] == v ] for k,v in small_pets.items()}
print(d)
# {0.69: ['Goldfish'], 1.5: ['Gerbil'], 2: ['Parakeet']}

Comme vous pouvez le voir par la méthode ci-dessus, ce code est un peu plus long que son prédécesseur, mais il permet à Python d'être utilisé de manière très dynamique en montrant l'utilisation de conditions dans la construction du dictionnaire et en augmentant la confusion car le dictionnaire small_pets est utilisé plusieurs fois. Soyez prudent en utilisant cette méthode si vous êtes débutant ou si vous vous familiarisez avec les dictionnaires. Si vous le souhaitez, vous pouvez renommer le même dictionnaire avec le même nom car vous inversez l'ancien par ses valeurs et ses clés. Ces 3 exemples sont ceux que j'ai pu comprendre et écrire du code basé sur celui-ci. Cependant, il existe de nombreuses façons de trouver vos réponses en Python et d'écrire votre code en fonction de vos besoins. Je dirais assurez-vous que vous êtes à l'aise avec les dictionnaires avant d'essayer quoi que ce soit en dehors de votre zone de confort. Je dirais aussi qu'il vaut mieux ne pas copier coller le premier code que vous rencontrez. Cela peut casser votre programme et rendre difficile le retour à sa forme d'origine et le faire fonctionner à nouveau correctement. Assurez-vous d'étiqueter correctement votre variable et votre programme devrait fonctionner en inversant les clés et leurs valeurs !

Ressources

J'ai trouvé mes informations sur StackOverflow pour écrire mon code avec le lien que j'ai utilisé ci-dessous. J'ai également ajouté le lien vers Real Python pour l'itération dans les dictionnaires et la rotation des clés dans les valeurs et le lien vers l'une de mes ressources préférées :AskPython. En tant que développeur junior Python, je trouve qu'il est crucial d'avoir autant de ressources que possible, tout comme Finxter pour m'aider à continuer à apprendre et à grandir ! J'espère que vous verrez également la valeur de ces ressources et plus encore et je vous encourage à les rechercher, à vous joindre et à vous perfectionner ! Je sais que je n'aurais certainement pas pu trouver les informations dont j'ai besoin pour écrire du code si je n'avais pas les ressources dont je dispose !

  • https://stackoverflow.com/questions/483666/reverse-invert-a-dictionary-mapping
  • https://realpython.com/iterate-through-dictionary-python/#turning-keys-into-values-and-vice-versa
  • https://www.askpython.com/python/dictionary/python-dictionary-comprehension