追加 - python 辞書のリスト




Python:リストをインデックス付きの辞書に変換する (4)

私は次のリストを変換しようとしています:

list = ['A','B','C']

次のような辞書に:

dict = {'A':0, 'B':1, 'C':2}

私は私のために働いていない他の投稿から回答を試みました。 私は今のところ次のコードを持っています:

{list[i]: i for i in range(len(list))}

これは私にこのエラーを与える:

unhashable type: 'list'

どんな助けでも大歓迎です。 ありがとう。


Pythonで予約されているため、変数名としてlistを使用しないでください。 enumerateを利用することもできenumerate

your_list = ['A', 'B', 'C']
dict = {key: i for i, key in enumerate(your_list)}

Pythonのdictコンストラクタには、 tupleリストをdictに変換する機能があります。キーはタプルの第1要素として、値はタプルの第2要素として使用されます。 これを実現するには、 (index, value) tupleを生成する組み込み関数enumerateを使用できます。

しかし質問の要件は厳密に反対です。つまり、 tuple(value, index)なければなりません。 したがって、これは、dictコンストラクタに渡す前にタプル要素を逆にする追加のステップを必要とします。 このステップでは、組み込みのreversedを使用してmapを使用してリストの各要素に適用できます

>>> lst = ['A', 'B', 'C']
>>> dict((map(reversed, enumerate(lst))))
>>> {'A': 0, 'C': 2, 'B': 1}

組み込みenumerateからリストのインデックスを取得できenumerate 。 インデックス値マップを逆にして、辞書の理解を使って辞書を作成するだけです

>>> lst = ['A','B','C']
>>> {k: v for v, k in enumerate(lst)}
{'A': 0, 'C': 2, 'B': 1}

ああ、組み込み変数や型に変数名を決して指定しないでください。


組み込み関数dictとzipを使用する:

>>> lst = ['A','B','C']
>>> dict(zip(lst,range(len(lst))))




dictionary