2

辞書を作成したい大きなリストがある場合、値を次のように割り当てたいだけだとすると、これを行う最も効率的な方法は何でしょうか。

{'item1':'0','item2':'1','item3':'2','itemn':'n-1'}

ここでは、すべてのキーに同じ値を割り当てることについて多くのことを見てきましたが、必要に応じて値を割り当てる方法については何もありません。

ありがとう。

編集:私がこれをしたい理由は、私が誰かのひどいコードを渡されたからです...(私が熟練したプログラマーであるというわけではありません)、IDで表されるオブジェクトのリストがあります番号: 5432、8976 など

それらの数は数百です。元のコードのようにリストを配列として扱い、それを見つけてrange(len(my_list))各オブジェクトの指標値を取得するのではなく、キー/値を持つ辞書を作成し、それを一度宣言して、配列を呼び出したり、この場合は毎回配列を再作成したりするのではなく、後で参照してください。それは合理的な考えですか?わかりませんが、試してみたいと思いました。

4

6 に答える 6

2

このコマンドを試してください:

d = dict(zip(your_list, range(len(your_list)))
于 2013-07-18T22:46:39.000 に答える
1
dict(x[i:i+2] for i in range(0, len(x), 2))
于 2013-07-18T22:45:39.243 に答える
1

答えは、使用している Python のバージョンによって異なるようです。

これらは、Python 2.7.3 で IPython 0.13 を使用した私の結果です。

In [11]: mylist = ["item{}".format(i) for i in range(10**7)]

In [12]: %timeit d = dict(zip(mylist, range(len(mylist))))
1 loops, best of 3: 6.97 s per loop

In [13]: %timeit d = {item: i for i, item in enumerate(mylist)}
1 loops, best of 3: 3.68 s per loop

In [14]: # Edit: xrange is faster than range in Python 2    

In [15]: %timeit d = dict(zip(mylist, xrange(len(mylist))))
1 loops, best of 3: 5.58 s per loop

これは、Python 3.3.2 で IPython 0.13 を使用して取得したものです。

In [5]: mylist = ["item{}".format(i) for i in range(10**7)]

In [6]: %timeit d = dict(zip(mylist, range(len(mylist))))
1 loops, best of 3: 2.62 s per loop

In [7]: %timeit d = {item: i for i, item in enumerate(mylist)}
1 loops, best of 3: 2.92 s per loop

これはおそらくzip、Python 3 ではリストを返さず、イテレータのみを返すためです...</p>

于 2013-07-18T23:11:12.067 に答える
0
dict(("item%d"%i,val) for i,val in enumerate(my_list,1)) 

おそらく

于 2013-07-18T22:46:42.187 に答える
0

今のところ割り当てられた値を気にしない場合、リストから辞書を作成する最も速い方法はdict.fromkeys(mylist)次のとおりです。

In [13]: mylist = ["stuff", "more stuff"]

In [14]: dict.fromkeys(mylist)
Out[14]: {'more stuff': None, 'stuff': None}
于 2013-07-18T23:15:14.287 に答える