J'essaie de convertir la liste suivante:
list = ['A','B','C']
Vers un dictionnaire comme:
dict = {'A':0, 'B':1, 'C':2}
J'ai essayé des réponses d'autres publications, aucune ne fonctionnant pour moi. J'ai le code suivant pour l'instant:
{list[i]: i for i in range(len(list))}
Ce qui me donne cette erreur:
unhashable type: 'list'
Toute aide est très appréciée. Merci.
Vous pouvez obtenir les indices d'une liste à partir de énumérer . Il vous suffit d'inverser la carte des valeurs d'index et d'utiliser un dictionnaire pour créer un dictionnaire.
>>> lst = ['A','B','C']
>>> {k: v for v, k in enumerate(lst)}
{'A': 0, 'C': 2, 'B': 1}
Ohh, et ne nommez jamais une variable à un type ou à un type.
Utilisez les fonctions intégrées dict et Zip:
>>> lst = ['A','B','C']
>>> dict(Zip(lst,range(len(lst))))
Le constructeur Python dict
a la capacité de convertir une liste de Tuple
en dict
, avec key comme premier élément de Tuple et value comme second élément de Tuple. Pour ce faire, vous pouvez utiliser la fonction intégrée enumerate
qui donne Tuple
de (index, value)
.
Cependant, l'exigence de la question est exactement l'inverse, c'est-à-dire que Tuple
devrait être (value, index)
. Cela nécessite donc une étape supplémentaire pour inverser les éléments Tuple avant de passer au constructeur de dict. Pour cette étape, nous pouvons utiliser la commande reversed
et l'appliquer à chaque élément de la liste à l'aide de map
>>> lst = ['A', 'B', 'C']
>>> dict(map(reversed, enumerate(lst)))
>>> {'A': 0, 'C': 2, 'B': 1}
N'utilisez pas list
comme nom de variable car il est réservé par Python. Vous pouvez également profiter de enumerate
.
your_list = ['A', 'B', 'C']
dict = {key: i for i, key in enumerate(your_list)}
Vous devez convertir la liste incalable en un tuple:
dct = {Tuple(key): idx for idx, key in enumerate(lst)}