gpt4 book ai didi

python - 在 Python 中迭代具有潜在条件的大型列表

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:22 25 4
gpt4 key购买 nike

我有大块数据,通常大约有 2000 多个条目,但在这份报告中,我们能够尽可能查看我们想要的数据,因此它最多可以有 10,000 条记录

报告分为:两个类别,然后在每个类别中,我们按货币拆分,因此我们在列表中有几个子类别。

我的问题在于如何有效地计算各种小计。我正在使用 Django 并传递一个 templatetag 货币和类别(如果适用),然后 templatetag 呈现总数。请注意,有时我只有类别的小计,没有通过货币。

最初,如果有像这样的货币/类别,我通过使用 .filter() 对每个小计使用单独的查询:

if currency:
entries = entries.filter(item_currency=currency)

这成了一个问题,因为我会有太多的查询,而且生成时间太长(2,000+ 毫秒),所以我选择使用 list(entries) 立即执行我的查询,然后循环遍历它具有简单的列表理解:

totals['quantity'] = sum([e.quantity for e in entries])

如果您还没有看到,我的问题在于 .. 如何在每个列表理解中有效地添加货币/类别的条件?有时他们不会在那里,有时他们会,所以我不能简单地输入:

totals['quantity'] = sum([e.quantity for e in entries if item_currency = currency])

我可以制作一个巨大的 if block ,但这不是很干净并且是维护灾难,所以我正在向 Stackoverflow 社区寻求一些见解..在此先感谢:)

最佳答案

你可以定义一个小的内联函数:

def EntryMatches(e):
if use_currency and not (e.currency == currency):
return False
if use_category and not (e.category == category):
return False
return True

然后

totals['quantity'] = sum([e.quantity for e in entries if EntryMatches(e)])

EntryMatches() 将可以访问封闭范围内的所有变量,因此无需再传递任何参数。您获得的优势是,要使用的条目的所有逻辑都在一个地方,您仍然可以使用列表理解来使 sum() 更具可读性,但您现在可以在 EntryMatches() 中拥有任意逻辑。

关于python - 在 Python 中迭代具有潜在条件的大型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com