目前,我有一个这样的语句效果很好:
if (l['key'] != "0") and (l['key'] != "") and (l['key'] != 'm3u8') and ('HIT' not in k['key']) :
我是列表理解的新手,所以我每次想排除扩展名时都没有添加(l ['key']!=“ something”),而是尝试这样做:
ext_group=["",'m3u8','0']
url_strings =['m3u8','test1','0','gif','potato']
if any(ext not in url_strings for ext in ext_group):
但是这不起作用。通常在循环中,我只能说“ print ext”,但是在这种情况下,我没有定义它会出错。如果我尝试打印出url_strings,它将打印出完整列表,而不是仅打印出尚未过滤掉的项目。
我在这里做错了什么,或者我不明白什么?
EDIT尝试执行此操作,但它也没有过滤,通过不过滤,我仍然看到打印出l ['key']的“”,'m3u8','0'值
for ext in ext_group:
if (l['key']!= ext) and ('HIT' not in k['key']) :
print l['key']
答案 0 :(得分:0)
根据我的理解,如果值在['','m3u8','0']
左右,并且另一个JSON对象具有“ key”值作为列表,并且列表不应该包含,则您尝试从键中过滤出JSON对象将'HIT'
作为元素。
您在列表理解中所做的尝试几乎是正确的,但在理解列表理解时出现了错误。
考虑以下代码:
ext_group=["",'m3u8','0']
url_strings =['m3u8','test1','0','gif','potato']
proper_values = []
for ext in url_strings:
if ext not in ext_group:
proper_values.append(ext)
这是您打算在列表理解中执行的操作,但是您已经切换了必须在for loop
中进行迭代并要检查if
条件的列表。
代替
if any(ext not in url_strings for ext in ext_group)
您应该和
一起去的if any ([ext for ext in url_strings if ext not in ext_group])
您也可以在同一张支票中添加第二个条件。像
if any([i for i in url_strings if i not in ext_group]) and ('HIT' not in k['key']):
希望您有想要的东西。否则将您的问题发表为评论。