Python 为生成器表达式中使用的条件连接字符串

Python concatenate string for conditions used in a generator expression

我有一组不同的生成器表达式条件,如果可能的话,我想尝试将条件连接为一个字符串,并在生成器表达式中使用这个字符串变量:

以下工作正常:

Total = sum(sale["Date"] == date for sale in Sales_Store)

其中 date 是一个整数,Sales_Store 具有相同键的字典列表,"Date" 是其中一个键名。它returns满足此条件的销售店铺的销售数量。

但这给出了错误:+ 不支持的操作数类型:'int' 和 'str'

strTest = "sale[\"Date\"] == date for sale in Sales_Store"
Total = sum(strTest)

当然,如果某个其他条件成立,我只希望生成器表达式中有这个条件,并且有几个其他条件与此连接,每个条件只适用于特定情况。

那么你知道是否有办法让这个串联工作?

您是否尝试过 int() 函数在加法之前将所有内容转换为整数?

字符串不是可执行代码。 Python 不会查看字符串并在可能的情况下执行它。您需要以不同的方式表达您的条件。

您可以创建一个函数,给定 一个 字典 returns 一个布尔值;对于简单的表达式,您可以使用 lambda 语法创建该函数:

condition = lambda d: d['Date'] == date

对于较大的测试,您可以使用 def condition(d): 函数定义并使用多个语句等。函数是可执行的表达式!

然后在 map() call 中使用它来将条件应用于每个字典:

sum(map(condition, Sales_Store))

如果您需要动态地改变条件,那么构建一系列测试,并使用any() or all()函数组合这些测试:

conditions = (test1, test2, test3)
all_conditions = lambda d: all(t(d) for t in conditions)
any_condition = lambda d: any(t(d) for t in conditions)

all_conditions_sum = map(all_conditions, Sales_Store)
any_conditions_sum = map(any_conditions, Sales_Store)

正如您可能从函数名称中看出的那样,如果 一个 测试为真,any() 将 return True all() 如果 所有 的测试都是正确的。

如何 select 进入 conditions 序列的测试由您决定。例如,您可以有一个字典将用户友好的字符串映射到一个函数,并让最终用户决定。