18

リスト文字列タグがあります。

キーをタグ文字列、値を配列インデックスとして辞書を初期化しようとしています。

for i, ithTag in enumerate(tag):
    tagDict.update(ithTag=i)

上記は {'ithTag': 608} を返します 608 は 608 番目のインデックスです

私の問題は、i が変数として解釈されている間、Python が「ithTag」を変数ではなく文字列として扱っていることです。

私は混乱しています。この種の特定の質問をグーグルで検索するのはちょっと難しいです。この質問のタイトルを正しく表現したことを願っていますが、

ありがとう!

4

6 に答える 6

46

あなたは実際にこれをしたい:

for i, tag in enumerate(tag):
    tagDict[tag] = i

.update() メソッドは、単一のキーと値のペアを変更するためではなく、別の辞書を使用して辞書を更新するために使用されます。

于 2008-10-06T06:05:00.257 に答える
17

賢くなりたい場合:

tagDict.update(map(reversed, enumerate(tag)))

更新してくれたブライアンに感謝します。これは明らかに、反復バージョンよりも ~5% 高速です。

(編集:私の答えが間違っていたことを指摘してくれてありがとうsaverio(現在は修正されています)。おそらく最も効率的/ Pythonicな方法は、わずかに変更されたTorsten Marekの答えでしょう:

tagDict.update((t, i) for (i,t) in enumerate(tag))

)

于 2008-10-06T06:41:44.507 に答える
12

それはワンライナーです:

tagDict = dict((t, i) for i, t in enumerate(tag))
于 2008-10-07T15:22:22.300 に答える
2

これがあなたがやりたいことだと思います:

d = {}
for i, tag in enumerate(ithTag):
   d[tag] = i
于 2008-10-06T06:05:05.470 に答える
2

試す

tagDict[ithTag] = i
于 2008-10-06T06:05:28.307 に答える
2

あなたが望むのはこれだと思います:

for i, ithTag in enumerate(tag):
    tagDict.update({ithTag: i})
于 2012-11-12T20:24:27.337 に答える