たくさんの単語のリストがあります。
それから、リスト内の各一意の単語をキーとして含み、それがキーの値として最初に表示される位置(リストインデックス)を含む辞書を作成したいと思います。
これを行うための効率的な方法はありますか?
たくさんの単語のリストがあります。
それから、リスト内の各一意の単語をキーとして含み、それがキーの値として最初に表示される位置(リストインデックス)を含む辞書を作成したいと思います。
これを行うための効率的な方法はありますか?
>>> l = ['a', 'b', 'c', 'b', 'a', 'd']
>>> import itertools as it
>>> dict(it.izip(reversed(l), reversed(xrange(len(l)))))
{'a': 0, 'b': 1, 'c': 2, 'd': 5}
とにかくすべての単語を見る必要があるので、これより速くなることはありません:
index = {}
for position, word in enumerate(list_of_words):
if word not in index:
index[word] = position
>>> l = ['a', 'b', 'c', 'b', 'a', 'd']
>>> dic = {l[i]:i for i in range(len(l)-1,-1,-1)}
>>> print(dic)
{'a': 0, 'c': 2, 'b': 1, 'd': 5}
@eumiroのソリューションの修正バージョン
>>> from itertools import count, izip
>>> l = ['a', 'b', 'c', 'b', 'a', 'd']
>>> dict(izip(reversed(l),count(len(l)-1,-1))) #In Py 3 just use zip
{'a': 0, 'c': 2, 'b': 1, 'd': 5}
これを試して
l = ['a', 'b', 'c', 'b', 'a', 'd']
l2 = set(l)
mydict = {v:l.index(v) for v in l2}
出力
{'a': 0, 'b': 1, 'c': 2, 'd': 5}