我有一组生成器表达式的条件会有所不同,如果可能的话,我想尝试将条件连接成一个字符串,并在生成器表达式中使用这个字符串变量:
以下工作正常:
Total = sum(sale["Date"] == date for sale in Sales_Store)
如果date是整数,而Sales_Store是具有相同键的字典列表,则“Date”是其中一个键名。它返回满足此条件的销售商店中的销售数量。
但这会给出错误:+:'int'和'str'
的操作数类型不受支持strTest = "sale[\"Date\"] == date for sale in Sales_Store"
Total = sum(strTest)
当然,如果某个其他条件成立,我只想在生成器表达式中使用此条件,并且还有其他几个条件要与此连接,每个条件仅适用于某些情况。
所以你知道是否有办法使这种连接有效吗?
答案 0 :(得分:1)
字符串不是可执行代码。 Python不会查看字符串并在可能的情况下执行它。你需要以不同的方式表达你的条件。
你可以创建一个函数,给定一个字典返回一个布尔值;对于一个简单的表达式,您可以使用lambda
语法创建该函数:
condition = lambda d: d['Date'] == date
对于较大的测试,您可以使用def condition(d):
函数定义并使用多个语句等。函数是可执行表达式!
然后在map()
call中使用该条件将条件应用于每个字典:
sum(map(condition, Sales_Store))
如果您需要动态更改条件,请构建一系列测试,并使用any()
或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()
将返回True
,all()
如果全部测试是真的。
如何选择进入conditions
序列的测试取决于您。例如,您可以使用字典将用户友好的字符串映射到函数,并让最终用户决定。
答案 1 :(得分:-1)
您是否尝试过int()函数在添加之前将所有内容转换为整数?