Python 尝试查看django中的列表中是否包含变量

Python 尝试查看django中的列表中是否包含变量,python,django,if-statement,tuples,Python,Django,If Statement,Tuples,我试图通过在视图中使用以下命令来查找所选国家/地区是否在元组列表中: if second_tier.profile.country in COUNTRIES: 如果我打印第二层.profile.country,我有CA 当我打印国家时,我得到: (('GB', 'United Kingdom'), ('AU', 'Australia'), ('AT', 'Austria'), ('BE', 'Belgium'), ('CA', 'Canada'), ('DK', 'Denmark'), ('F

我试图通过在视图中使用以下命令来查找所选国家/地区是否在元组列表中:

if second_tier.profile.country in COUNTRIES:
如果我打印第二层.profile.country,我有
CA
当我打印国家时,我得到:

(('GB', 'United Kingdom'), ('AU', 'Australia'), ('AT', 'Austria'), ('BE', 'Belgium'), ('CA', 'Canada'), ('DK', 'Denmark'), ('FI', 'Finland'), ('FR', 'France'), ('DE', 'Germany'), ('HK', 'Hong Kong'), ('IE', 'Ireland'), ('IT', 'Italy'), ('LU', 'Luxembourg'), ('NL', 'Netherlands'), ('NZ', 'New Zealand'), ('NO', 'Norway'), ('PT', 'Portugal'), ('SG', 'Singapore'), ('ES', 'Spain'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('US', 'United States'))

因此if语句应该返回True,但是返回False。

如果有一个元组,那么需要在国家/地区进行迭代

>>> for x in COUNTRIES:
...     if second_tier.profile.country in x:
...         print ("ok")

您当前正在元组中搜索字符串。您需要确保
国家/地区
都是字符串,才能使此功能正常工作。您可以使用一些简单的列表理解来转换嵌套元组

使用元组解包:

COUNTRIES = [x, _ for x in COUNTRIES]
使用索引:

COUNTRIES = [x[0] for x in COUNTRIES]
它从每个元组中获取第一个元素(country)并将它们放入列表中

然后你可以做:

if second_tier.profile.country in COUNTRIES:
它将返回
True

或者,您可以循环查看
国家/地区
并明确匹配
第二层.profile.country

for country, _ in COUNTRIES:
    if second_tier.profile.country == country:
        return True
您也可以在此处使用:

如果找到任何匹配项,则返回
True

注意:由于您只需执行一个简单的查找,您可以将
国家
转换为一个集合,这将允许O(1)查找而不是O(N)查找


我还使用了上面的
来丢弃不需要的值,例如每个元组的第二项

因此,您是在比较字符串与元组,而不是字符串与字符串,这就是原因。我如何解决此问题?
如果[x代表x,[u代表国家]:中的second_tier.profile.country:
@RoadRunner,[x[0]中的second_tier.profile.country与您的解决方案有什么区别?
any(second_tier.profile.country == x for x, _ in COUNTRIES)