web-dev-qa-db-fra.com

Python: Convertir une liste en dictionnaire avec des index

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.

39
ahajib

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.

68
Abhijit

Utilisez les fonctions intégrées dict et Zip:

>>> lst = ['A','B','C']
>>> dict(Zip(lst,range(len(lst))))
9
florex

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}
3
Sohaib Farooqi

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)}
1
gr1zzly be4r

Vous devez convertir la liste incalable en un tuple:

dct = {Tuple(key): idx for idx, key in enumerate(lst)}
0
Daniel