我有一个字典inserts
列表,应将其插入数据库。由于某些元素已经在数据库db_entry_ids
中,因此我想将它们过滤掉。现在,代码非常简单:
[d for d in inserts if d["entry_id"] not in db_entry_ids]
与
len(inserts) = 35000
len(db_entry_ids) =280000
Python需要几分钟的时间。我希望有一些简单的方法可以提高效率。
PS:d["entry_id"]
是一个字符串,而db_entry_ids
是一个字符串列表。因此, id
可能会产生误导。
答案 0 :(得分:3)
将db_entry_ids
转换为集合。集合中的not in
操作更快。
db_entry_ids = set(db_entry_ids)
[d for d in inserts if d["entry_id"] not in db_entry_ids]
请参阅以下内容以供参考:https://wiki.python.org/moin/TimeComplexity