私は、装飾、ソート、装飾解除のアプローチを変更せずに、タプルのリストにインデックスを付けるためのレシピ/例を探していました。
例えば:
l=[(a,b,c),(x,c,b),(z,c,b),(z,c,d),(a,d,d),(x,d,c) . . .]
私が使用してきたアプローチは、2 番目の要素の defaultdict を使用して辞書を作成することです。
from collections import defaultdict
tdict=defaultdict(int)
for myTuple in l:
tdict[myTuple[1]]+=1
次に、リスト内の各項目について、タプルの 2 番目の項目のみで構成されるリストを作成する必要があります。そこにたどり着くにはいくつかの方法がありますが、簡単な方法は次のとおりです。
tempList=[myTuple[1] for myTuple in l]
次に、tdict の各項目のインデックスを生成します
indexDict=defaultdict(dict)
for key in tdict:
indexDict[key]['index']=tempList.index(key)
明らかに、これはあまり Pythonic ではないようです。インデックスを直接取得するために何か魔法のようなものを使用できるはずだと考えて、例や洞察を見つけようとしています。これまでのところ、そのような幸運はありません。
注意してください、私は自分のアプローチをもう少し直接的に取ることができ、tdictを生成しないことを理解しています.
出力は、インデックスを持つ辞書になる可能性があります
indexDict={'b':{'index':0},'c':{'index':1},'d':{'index':4},. . .}
ナディアの回答から多くのことを学んだ後、答えはノーだと思います。
彼女の反応は機能しますが、必要以上に複雑だと思います。私は単に
def build_index(someList):
indexDict={}
for item in enumerate(someList):
if item[1][1] not in indexDict:
indexDict[item[1][1]]=item[0]
return indexDict