これは、辞書内包表記と辞書内包表記内のリスト内包表記で set()を使用した場合のパフォーマンスと、新しい辞書への割り当ての繰り返しについての質問です。
したがって、たまたまリストのリストであるデータセットがあり、新しい辞書を作成できるように、ビッグリスト内の各リストで「0」でインデックス付けされた要素の一意のリストを取得する必要がありますそれらから.. dict.fromkeys() のようなもの.. ここで、一意のキーのリストを提供する必要があります..
私は使用しています
[1]{ x : [] for x in set([i[0] for i in data])}
また、
[2]{ i[0] : [] for i in data}
ここで参照するサンプル データは次のようになります。
[[1,3,4], [3,5,2], [1,5,2]]
上記の [1] と [2] を実行した結果は次のようになります。
{ 1:[], 3: [] }
両方のステートメントで %timeit を試してみましたが、両方ともほぼ同じ結果が得られたため、リストの大きなリストの場合、パフォーマンスに関してどちらが最適かを特定するのが難しくなっています
ここで潜在的なボトルネックを特定するにはどうすればよいですか?
編集:
これが結果の説明に役立つ場合..
In [172]: data_new = data * 10000
In [173]: %timeit { i[0] : [] for i in data_new}
10 loops, best of 3: 160 ms per loop
In [174]: %timeit { x : [] for x in set([i[0] for i in data_new])}
10 loops, best of 3: 131 ms per loop
In [175]: data_new = data * 100000
In [176]: %timeit { x : [] for x in set([i[0] for i in data_new])}
1 loops, best of 3: 1.37 s per loop
In [177]: %timeit { i[0] : [] for i in data_new}
1 loops, best of 3: 1.58 s per loop
In [178]: data_new = data * 1000000
In [179]: %timeit { i[0] : [] for i in data_new}
1 loops, best of 3: 15.8 s per loop
In [180]: %timeit { x : [] for x in set([i[0] for i in data_new])}
1 loops, best of 3: 13.6 s per loop