Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何加快遍历大型词典的速度_Python_Loops_Dictionary - Fatal编程技术网

Python 如何加快遍历大型词典的速度

Python 如何加快遍历大型词典的速度,python,loops,dictionary,Python,Loops,Dictionary,我有一个字典,分别有键值对句子ID和簇ID 这是一种格式:{sequence\u ID:cluster\u ID} 例如: my_id_dict: {0: 71, 1: 63, 2: 66, 3: 92, 4: 49, 5: 85 . .} 总共,我有超过200000个句子ID和100个集群ID 我试图循环使用my_id_dict,为每个集群生成一个句子id的列表 我想要的示例输出: Cluster 0 [63,

我有一个字典,分别有键值对
句子ID
簇ID

这是一种格式:
{sequence\u ID:cluster\u ID}

例如:

my_id_dict:
    {0: 71, 
    1: 63, 
    2: 66, 
    3: 92, 
    4: 49, 
    5: 85
      .
      .}
总共,我有超过200000个句子ID和100个集群ID

我试图循环使用
my_id_dict
,为每个集群生成一个句子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]
这是我使用的代码:

逻辑是,对于每个集群,创建一个句子列表,然后对于所有200000 over dict值中的cluster_id,如果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]

这是可行的,但速度非常慢。有没有更快的方法可以做到这一点?

你要检查每个集群的每个句子。只需将每个句子检查一次,然后将其分配到一个簇:

cluster_dict = defaultdict(list)
for sentence, cluster in my_id_dict.items():
    cluster_dict[cluster].append(sentence)