python将字典(dist)用json.dumps()序列化后存入list,再次重新序列化改字典并删除,却删不掉得问题

场景:
借助redis存储json.dumps()序列化的dist,删除不掉

测试代码:

import json
from redis import Redis

rd = Redis(host="xxx", port=6379, db=0)

data = {"a": 1, "b": 2, "c": 3} 
rd.lpush("test1", json.dumps(data))   # redis列表中添加一个被json序列化的dist元素
print("第一次打印redis列表test1中的元素")
print(rd.lrange("test1", 0, -1))
rd.lrem("test1", json.dumps(data))   # 通过lrem删除被同一个被json序列化的dist元素
print("第二次打印redis列表test1中的元素")
print(rd.lrange("test1", 0, -1))

结果

第一次打印redis列表test1中的元素
[’{“a”: 1, “b”: 2, “c”: 3}’]
第二次打印redis列表test1中的元素
[’{“b”: 2, “a”: 1, “c”: 3}’]

从结果中会发现,明明使用了lrem删除redis列表中的元素,为什么没有删除掉
答案: dist是无序的,被json.dumps() 序列化后的dist也是无序的.
rd.lrem() 是删除指定元素,josn.dumps(dist)元素已经无序的被写入了redis列表中,直接用rd.lrem() 去删除重新获取的json.dumps(dist),其实这里的元素已经与写入的dist元素不同了,所以是无法删除的。
如果dist中的元素比较少的话,应该是可以删除的,顺序没有被打乱,但如果元素比较多的时候,就会出现乱序,这个时候在通过JSON序列化生成的字符串就不是原来的字符串了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值