python布隆过滤器

python布隆过滤器的使用的与操作详细介绍
布隆过滤器:
布隆过滤器是一种概率空间高效的数据结构。它与hashmap非常相似,用于检索一个元素是否在一个集合中。它在检索元素是否存在时,能很好地取舍空间使用率与误报比例。正是由于这个特性,它被称作概率性数据结构
首先,需要将布隆过滤器相关模块安装:
1.pip3 install pybloom_live(直接打开命令提示符即可安装)
2.pip3 install bitarray-0.8.1-cp36-cp36m-win_amd64.whl(pybloom_live依赖这个包,需要先安装)下面给出安装地址:pybloom_live地址

安装之后我们详细介绍其相关用法:
首先我们调用此模块:

from pybloom_live import ScalableBloomFilter

例如:给出如下相关例子:

from pybloom_live import ScalableBloomFilter
sbf = ScalableBloomFilter(initial_capacity=100, error_rate=0.001, mode=ScalableBloomFilter.LARGE_SET_GROWTH)
c=[1,2,3,4,5]
for i in c:
    sbf.add(i)
print( 6 in sbf)

输出为False
即我们将列表c的相关内容遍历到布隆过滤器,然后判断6是否在其中(Bloom Filter仅仅维护一个m位的BitArray(位数组),最开始m位全部为零。不断记录元素(如已经抓取的url),也仅仅是m位的BitSet中有些位置由0置成1的过程。此外,Bloom Filter需要K个不同的hash函数,并且每个hash函数的结果要是在0~m-1范围的,因为我们要把每一个hash函数的结果i映射到位数租的第i位上去。
当我们添加如下代码时:sbf.add(6) print( 6 in sbf)
此时输出为:True

下面 我给出一段较长代码:(详细介绍)

from pybloom_live import ScalableBloomFilter
import os
import json
sbf = ScalableBloomFilter(initial_capacity=100, error_rate=0.001, mode=ScalableBloomFilter.LARGE_SET_GROWTH)
d=[]
Dect=[{"第一个":1,"第二个":"一"},{"第一个":2,"第二个":"二"},{"第一个":3,"第二个":"三"}]
with open("E:\\cihu_new.json", "w+", encoding='utf-8_sig')as f:
    json.dump(Dect, f, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False)
f = os.path.exists("E:\\cihu_new.json")
if f == True:
    with open("E:\\cihu_new.json", "r+",encoding="utf-8_sig")as f:
        data = json.load(f)
    print(data)
    for i in data:
        i=i["第一个"]
        print(i)
        sbf.add(i)
print(3 in sbf)
print(4 in  sbf)
for i in data:
    i = i["第二个"]
    print(i)
    sbf.add(i)
print("三" in sbf)
x="我校潘继承"
if x not in sbf:
    sbf.add(x)
print(x in sbf)

输出如下:

[{'第一个': 1, '第二个': '一'}, {'第一个': 2, '第二个': '二'}, {'第一个': 3, '第二个': '三'}]
1
2
3
True
False
一
二
三
True
True

大家可以根据代码自行理解,当我们处理数据庞大时,需要布隆过滤器来支持我们的操作,减少时间的消耗!

上述为我的理解。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值