我从一个 OrderedDict 类型的对象(文档)开始。现在我需要对这个字典应用一些过滤器,所以首先我对值应用列表理解:
documents = [
doc
for doc in documents.values()
if all(
doc.get(name, "") == value or doc.get("searchResults", {}).get(name, "") == value
for name, value in filters.dict(exclude_none=True).items()
if name not in ["skip", "limit"]
)
]
到目前为止一切顺利。我在难以察觉的时间内得到了输出(例如 1 秒)。 但后来我考虑到我也想保留字典键,所以我以类似的方式实现字典理解:
documents = {
key: value
for key, value in documents.items()
if all(
value.get(field, "") == field_value or value.get("searchResults", {}).get(field, "") == field_value
for field, field_value in filters.dict(exclude_none=True).items()
if field not in ["skip", "limit"]
)
}
但令我惊讶的是,执行时间要长得多! 15 次或更多次。为什么会发生这种情况,有没有其他方法可以保留文档密钥并缩短执行时间(这是针对 Web 应用程序的)? 注意:文档具有相当高的扩展。