2016-10-31 2 views
1

У меня есть словарь с парами значений ключа sentence_ID и cluster_ID соответственно.Как ускорить итерацию через большой словарь

Это формат: {sentence_ID : cluster_ID}

Пример:

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

В общей сложности, у меня есть 200000 над sentence_IDs и 100 cluster_IDs.

Я пытаюсь зациклиться на my_id_dict, чтобы сгенерировать список предложений предложений для каждого кластера.

Пример выходных я хочу:

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

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

Это код, который я использовал:

Логика в том, что для каждого кластера, создать список предложения, то для CLUSTER_ID во всех 200000. над Dict значения, если значения dict = текущий индекс кластера, напишите идентификатор предложения в список предложений.

Продолжить в течение 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) 
Смежные вопросы