2016-04-06 6 views
14

インデックスで辞書にリストを変換します私のために。Pythonの:働いている他の記事なしから</p> <pre><code>dict = {'A':0, 'B':1, 'C':2} </code></pre> <p>私が試してみました答え:のような辞書に</p> <pre><code>list = ['A','B','C'] </code></pre> <p>:私は次のリストを変換しようとしています

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

私は、このエラーできます:すべてのヘルプははるかに高く評価されて

unhashable type: 'list' 

を私は今、次のコードを持っています。ありがとう。

+0

を使用して、リストの各要素に適用します。 – Daniel

+1

1.変数名として 'list'を使用しないでください2.' {j:i for i、j for i enumerate(l)} 'のように 'enumerate'を使用してください' –

+1

あなたが私たちに表示していないコードにバグがあります。 'list 'の要素はおそらくリストですが、' list [i]:i'の代わりに 'list:i'を書くなどの間違いを犯す可能性もあります。 – user2357112

答えて

28

リストのインデックスは、組み込みのenumerateから取得できます。あなただけの内蔵または型に変数に名前を付けるんおお

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

辞書を作成するために、指標値マップを逆にして辞書理解を使用する必要がない、と。

0

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

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

for-loopの項目を使ってみませんか? – Daniel

+0

する必要はありません。私はまだそれを変更しました。 –

+1

ああ...いつもうまく動作するコードのために下降声を得るのは素晴らしいことです。 –

0

あなたはタプルに非ハッシュリストを変換する必要があります。

dct = {tuple(key): idx for idx, key in enumerate(lst)} 
1

使用組み込み関数のdictとジップ:

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

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

質問の要件は正反対です。すなわち、tuple(value, index)である必要があります。したがって、これは、dictコンストラクタに渡す前にタプル要素を逆にする追加のステップを必要とします。このステップのために我々は、組み込みreversedを使用することができますし、あなたのコードは、私の作品map

>>> lst = ['A', 'B', 'C'] 
>>> dict((map(reversed, enumerate(lst)))) 
>>> {'A': 0, 'C': 2, 'B': 1} 
関連する問題

 関連する問題