lst = [{"id": "111", "value": "1"},
{"id": "222", "value": "2"},
{"id": "333", "value": "3"},
{"id": "444", "value": "4"},
{"id": "555", "value": "5"}]
lt = ["111", "123", "222", "333"]
for item in lt:
if item in lst:
print("在")
else:
print("不在")
这个任务其实是从网页上爬取数据下来进行对比。lst是我现在已有的数据列表,想一边从网页爬取数据的同时进行比对,lt就是存爬取数据的列表。因为网页数据更新并不是直接在最后追加,而是根据某种规则插入。已有的解决方案是将数据全部爬取下来存入lt之后与lst统一比对,这样的话数据量很大,影响效率。有没有能一边爬取一边对比的方法,能够使得在爬取一半时满足了差异数量就停止了爬取的那种,提高效率
这样子可以嘛
lst = [{"id": "111", "value": "1"},
{"id": "222", "value": "2"},
{"id": "333", "value": "3"},
{"id": "444", "value": "4"},
{"id": "555", "value": "5"}]
lt = ["111", "123", "222", "333"]
lsts = []
for i in lst:
lsts.append(i["id"])
print(lsts)
# 求交集
result = list(set(lt) & set(lsts))
print("lt中存在字典列表lst的元素有:", result)
```
lst = [{"id": "111", "value": "1"},
{"id": "222", "value": "2"},
{"id": "333", "value": "3"},
{"id": "444", "value": "4"},
{"id": "555", "value": "5"}]
lt = ["111", "123", "222", "333"]
for i in range(len(lst)):
if lst[i]['id'] in lt :
print("在")
else:
print("不在")
改成这样应该能满足你的需要了
你这个场景不要求100%的精度,完全可以使用一个布隆过滤器来解决。
布隆过滤器使用的内存极小,并且匹配速度又快。就是精度有一点损失。但是你的场景够用了。
把字典中id放到一个set集合中,判断lt的每个元素是否在集合中即可
你题目的解答代码如下:
lst = [{"id": "111", "value": "1"},
{"id": "222", "value": "2"},
{"id": "333", "value": "3"},
{"id": "444", "value": "4"},
{"id": "555", "value": "5"}]
setobj = set(d['id'] for d in lst)
lt = ["111", "123", "222", "333"]
for item in lt:
if item in setobj:
print("在")
else:
print("不在")
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
应该是按照你的需要已经解决了,如果有帮助的话麻烦点一下采纳。
我帮你优化爬虫程序