如何判断一个字典列表中是否已出现过目标key

如何判断一个存放字典的列表中,是否已存在目标key的那个字典元素
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存放lst中的key-“id”。想要实现的效果为:判断lt中的元素是否在字典列表lst中已作为key存在过
数据量很大,想寻求一个效率高的解决方式

这个任务其实是从网页上爬取数据下来进行对比。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("不在")

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

img

应该是按照你的需要已经解决了,如果有帮助的话麻烦点一下采纳。

我帮你优化爬虫程序