为什么 Dictionary Comprehension 的执行时间比 List Comprehension 长很多?

问题描述 投票:0回答:0

我从一个 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 应用程序的)? 注意:文档具有相当高的扩展。

python algorithm data-structures list-comprehension dictionary-comprehension
© www.soinside.com 2019 - 2024. All rights reserved.