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
序列的测试由您决定。例如,您可以有一个字典将用户友好的字符串映射到一个函数,并让最终用户决定。
我有一组不同的生成器表达式条件,如果可能的话,我想尝试将条件连接为一个字符串,并在生成器表达式中使用这个字符串变量:
以下工作正常:
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
序列的测试由您决定。例如,您可以有一个字典将用户友好的字符串映射到一个函数,并让最终用户决定。