如何通过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 '}'