首页 > 解决方案 > .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)

标签: python-3.xdictionary

解决方案


内联if语句存在于list理解中以允许表达语法,例如:

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

在他们之中。

根据python语法,没有办法将语句与标准循环本身表达if在同一行。for来自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] 

wherestar_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 '}' 

推荐阅读