数据类型:集合数据类型(set)

集合数据类型(set)

一特点

1、无序、去重
2、元素是字符串类型
3、最多包含2^32-1个元素

二基本命令

# 1、增加一个或者多个元素,自动去重
    SADD key member1 member2
# 2、查看集合中所有元素
    SMEMBERS key
# 3、删除一个或者多个元素,元素不存在自动忽略
    SREM key member1 member2
# 4、元素是否存在
    SISMEMBER key member
# 5、随机返回集合中指定个数的元素,默认为1个
    SRANDMEMBER key [count]
# 6、弹出成员  (默认为1)随机弹出
    SPOP key [count]
# 7、返回集合中元素的个数,不会遍历整个集合,只是存储在键当中了
    SCARD key
# 8、把元素从源集合移动到目标集合
    SMOVE source destination member
    例句:smove myset1 myset2 2
        将myset1中的2移动到myset2里面(相当于剪切)
# 9、差集(number1 1 2 3 number2 1 2 4)
#差集:number里面有的 number里面没有的
    SDIFF key1 key2  
# 10、差集保存到另一个集合中
    SDIFFSTORE destination key1 key2
# 11、交集(两个里面都有的)
    SINTER key1 key2
    #将交集的数据复制给新的set 
    SINTERSTORE destination key1 key2
# 11、并集(合在一起去掉重复的)
    SUNION key1 key2
    SUNIONSTORE destination key1 key2

python操作set

# 1、给name对应的集合中添加元素
sadd(name,values)
r.sadd("set_name","tom")
r.sadd("set_name","tom","jim")

# 2、获取name对应的集合的所有成员: 集合
smembers(name)

# 3、获取name对应的集合中的元素个数
scard(name)
r.scard("set_name")

# 4、检查value是否是name对应的集合内的元素:True|False
sismember(name, value)

# 5、随机删除并返回指定集合的一个元素
spop(name)
mumber = r.spop('set_name')

# 6、删除集合中的某个元素
srem(name, value) 
r.srem("set_name", "tom")

# 7、获取多个name对应集合的交集
sinter(keys, *args)

r.sadd("set_name","a","b")
r.sadd("set_name1","b","c")
r.sadd("set_name2","b","c","d")

print(r.sinter("set_name","set_name1","set_name2"))
#输出:{b'b'}

# 8、获取多个name对应的集合的并集
sunion(keys, *args)
r.sunion("set_name","set_name1","set_name2")

 

案例: 新浪微博的共同关注

需求: 当用户访问另一个用户的时候,会显示出两个用户共同关注过哪些相同的用户

设计: 将每个用户关注的用户放在集合中,求交集即可

实现:

  user001 = {'peiqi','qiaozhi','danni'}

  user002 = {'peiqi','qiaozhi','lingyang'}

  user001和user002的共同关注为:

  SINTER user001 user002

结果为: {'peiqi','qiaozhi'}

import redis

r = redis.Redis(host='192.168.153.136',port=6379,db=0)

# 用户1关注的人
r.sadd('user_first','peiqi','qiaozhi','danni')
# 用户2关注的人
r.sadd('user_second','peiqi','qiaozhi','lingyang')

# user_first和user_second的共同关注的人为??求差集
result = r.sinter('user_first','user_second')
# 把集合中的每个元素转为string数据类型
focus_on_set = set()
for r in result:
    focus_on_set.add(r.decode())

print(focus_on_set)

 

posted @ 2019-08-06 20:28  maplethefox  阅读(744)  评论(0编辑  收藏  举报