2016-10-31 8 views
1

私はキー値のペアがそれぞれsentence_IDcluster_IDの辞書を持っています。大きな辞書を使って反復処理を高速化する方法

これは形式である:{sentence_ID : cluster_ID}

例:合計で

my_id_dict: 
    {0: 71, 
    1: 63, 
    2: 66, 
    3: 92, 
    4: 49, 
    5: 85 
     . 
     .} 

、私はsentence_IDs上200,000 100 cluster_IDsを有します。

私はmy_id_dictをループして、の文章のリストを生成しようとしています。各クラスタの文番号はです。

出力例私がしたい:

ロジックは、各クラスタのために、辞書上のすべての20万にCLUSTER_IDのために、その後、文のリストを作成することです:これは私が使用したコードがある

Cluster 0 
[63, 71, 116, 168, 187, 231, 242, 290, 330, 343] 

Cluster 1 
[53, 107, 281, 292, 294, 313, 353, 392, 405, 479] 

値、dict値==現在のクラスタインデックスの場合は、センテンスリストにセンテンスIDを書き込みます。

100回続けます。

cluster_dict = defaultdict(list) 
    num_clusters = 100 

    for cluster in xrange(0,num_clusters): 
     print "\nCluster %d" % cluster 

     sentences = [] 
     for i in xrange(0,len(my_id_dict.values())): 
      if(my_id_dict.values()[i] == cluster): 
       sentences.append(my_id_dict.keys()[i]) 

     cluster_dict[cluster] = sentences 
     print sentences[:10] 

これは動作しますが、非常に遅いです。私はこれを行うことができるより速い方法はありますか?

答えて

1

あなたは各クラスターのすべての文を処理しています。各文章を一度上書きしてクラスタに割り当てます。

cluster_dict = defaultdict(list) 
for sentence, cluster in my_id_dict.items(): 
    cluster_dict[cluster].append(sentence) 
関連する問題