我试图通过在我的视图中使用以下命令来查找所选国家/地区是否在元组列表中:
df_filled = df %>%
group_by(variable_B) %>%
mutate(variable_A = first(na.omit(variable_A)))
df_filled %>%
group_by(variable_A, variable_B) %>%
summarise(total=sum(variable_C))
如果我打印second_tier.profile.country,我有if second_tier.profile.country in COUNTRIES:
当我打印国家/地区时,我得到:
CA
所以if语句应该返回True,但是返回为False。
答案 0 :(得分:2)
您有一个元组元组,那么您需要在COUNTRIES中进行迭代。
>>> for x in COUNTRIES:
... if second_tier.profile.country in x:
... print ("ok")
答案 1 :(得分:2)
您当前正在元组的元组中搜索字符串。您需要确保COUNTRIES
是所有字符串才能完成此工作。您可以使用一些简单的列表推导来转换嵌套的元组。
使用元组拆包:
COUNTRIES = [x, _ for x in COUNTRIES]
使用索引:
COUNTRIES = [x[0] for x in COUNTRIES]
从每个元组中提取第一个元素(国家/地区)并将其放入列表中。
那么您可以做:
if second_tier.profile.country in COUNTRIES:
,它将返回True
。
或者,您也可以遍历COUNTRIES
并明确匹配second_tier.profile.country
:
for country, _ in COUNTRIES:
if second_tier.profile.country == country:
return True
您也可以在此处使用any()
:
any(second_tier.profile.country == x for x, _ in COUNTRIES)
找到了任何匹配项的返回True
。
注意:由于您只是执行简单的查找,因此可以将COUNTRIES
转换为 set ,这将允许使用O(1)查找O(N)查找。
我还在上面使用_
来丢弃不需要的值,例如每个元组的第二项。