.items()循环与if的组合



如何通过dict与.items()和if条件组合循环?它在列表理解中工作,我知道我可以循环遍历键并使用test_dict[key]获得项目,但是在使用.items()循环时可能吗?

test_dict = {'a':1,'b':2,'c':3}
skip = ['b']
[print(key,item) for key,item in test_dict.items() if key not in skip] #works
# for key,item in test_dict.items() if key not in skip:
#     print(key,item)

内联if语句存在于list推导式中,允许表达以下语法:

for key,item in test_dict.items():
if key not in skip:
# do stuff

根据python语法,没有办法在与标准for循环本身相同的行上表达if语句。从https://docs.python.org/3/reference/grammar.html

for_stmt:
| 'for' star_targets 'in' ~ star_expressions ':' [TYPE_COMMENT] block [else_block] 
| ASYNC 'for' star_targets 'in' ~ star_expressions ':' [TYPE_COMMENT] block [else_block] 

其中star_expressions指多个expressions。虽然expression可以有

disjunction 'if' disjunction 'else' expression

这指的是实际的dict.items(),只在循环入口计算。如:

for item in test_dict.values() if True else [1, 2, 3]:

您还可以看到for_if_clauses只与推导式和生成器表达式相关,因为它们只出现在这些定义中。

listcomp:
| '[' named_expression ~ for_if_clauses ']' 
genexp:
| '(' named_expression ~ for_if_clauses ')' 
setcomp:
| '{' named_expression ~ for_if_clauses '}' 
dictcomp:
| '{' kvpair for_if_clauses '}' 

相关内容

  • 没有找到相关文章

最新更新