美文网首页
python 字典处理的一些坑

python 字典处理的一些坑

作者: GThyton | 来源:发表于2017-09-25 21:58 被阅读0次

    问题背景:这两天用python做大数据处理,抽取每个文本单词,进行统计排序。数据大概有2000万个,利用python多进程处理。数据同步用的python多进程通信中比较常使用的Manager Dict。

    原始代码是这样写的.

    def process_file_path_list(self, path_list, total_tf_map):

         for path_ in path_list:

         tf_dict = self.process_file(path_) # extract word in file

         for (key, value) in tf_dict.items():

    # update dict

        if key in total_tf_map.keys():

            total_tf_map[key] += value 

        else:

            total_tf_map[key] = value

    上面这个代码跑了一整天才把数据跑完,非常耗时,但是抽取word的代码并不是性能瓶颈所在啊,另外按理说使用字典方式进行数据存取也不会太慢啊,但是这货就是跑了一整天。。。实在受不了了,分析了下原因,原来是这句代码导致的。

    if key in total_tf_map.keys():

    用过python的朋友应该挺熟悉,判断一个key在不在字典里,这个方法也挺好用的。但是为啥性能这么低,按理说python的字典内部实现上是用哈希表,性能应该挺好的啊。琢磨了半天才发现这里有个坑,dict.keys()这个函数返回的是一个列表啊,是一个列表。。。处理这么大的数据,返回出来的列表至少也得有几十万个数据,在这些数据里找key那岂不不是费老大劲了。坑啊。。。

    后来代码改成:

    def process_file_path_list(self, path_list, total_tf_map):

         for path_ in path_list:

        tf_dict = self.process_file(path_)

        for (key, value) in tf_dict.items():

    # update total_tf_dict_

         if total_tf_map.get(key) != None:

             total_tf_map[key] += value

        else:

            total_tf_map[key] = value

    利用dict的get方法,这个方法是直接利用python哈希表进行查找,速度由原来的一天提高到只要半个小时。。。

    相关文章

      网友评论

          本文标题:python 字典处理的一些坑

          本文链接:https://www.haomeiwen.com/subject/rkqjextx.html