博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 字典处理的一些坑
阅读量:5092 次
发布时间:2019-06-13

本文共 1021 字,大约阅读时间需要 3 分钟。

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
                
用过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
                
单次查询中:看来list 就是O(n)的;而set做了去重,本质应该一颗红黑树(猜测,STL就是红黑树),复杂度O(logn);dict类似对key进行了hash,然后再对hash生成一个红黑树进行查找,其查找复杂其实是O(logn),并不是所谓的O(1)。O(1)只是理想的实现,实际上很多hash的实现是进行了离散化的。dict比set多了一步hash的过程,so 它比set慢,不过差别不大。
so,如果是要频繁的查找,请使用set吧!

转载于:https://www.cnblogs.com/apollo1616/articles/9964928.html

你可能感兴趣的文章
java之hibernate之helloworld
查看>>
微服务之初了解(一)
查看>>
Iterator invalidation(迭代器失效)
查看>>
GDOI DAY1游记
查看>>
Android 网络编程
查看>>
移动端前端笔记 — 遇到的常见JS与CSS问题及解决方法
查看>>
算法笔记_039:杨辉三角形(Java)
查看>>
C# 退出程序方法
查看>>
命令行卸载IE
查看>>
解决图片三像素的问题
查看>>
代码重构七
查看>>
php socket通信(tcp/udp)
查看>>
MongoDB安装配置(Windows)
查看>>
常用的事件
查看>>
Adam 算法
查看>>
WebService—规范介绍和几种实现WebService的框架介绍
查看>>
周鸿祎:做产品体验先把自己切换到二傻子模式
查看>>
mips32和x86下的大小端模式判定
查看>>
[js]js设计模式-构造函数模式
查看>>
npm install 报node-sass错误
查看>>