PyCharm 警告:字典上的过滤器出现意外类型

Bat*_*ato 4 python pycharm

我在 PyCharm 中有以下代码:

LOCATIONS = {'loc1': [a, b, c], 'loc2': [d, e], 'loc3': [f, g]}
labels = ['loc2', 'loc3']
task_locations = dict(filter(lambda location: location[0] in labels, LOCATIONS.items()))
Run Code Online (Sandbox Code Playgroud)

PyCharm 发出以下警告filter(lambda location: location[0] in labels, LOCATIONS.items())

Unexpected type(s):
(Iterator[str])
Possible types:
(Mapping)
(Iterable[Tuple[Any, Any]])
Run Code Online (Sandbox Code Playgroud)

我应该如何针对警告采取行动?相同的表达式,但在Dict[str, int], 上没有警告。LOCATIONS所以我想这与a有关Dict[str, List[str]]

Ago*_*iro 5

这是 PyCharm 的误报。它认为过滤器将返回Iterator[str]事实并非如此,因为它的输入是dict_itemswhich is an Iterable[Tuple[Any, Any]]

您还可以像这样简化代码:

task_locations = {k: v for k, v in LOCATIONS.items() if k in labels}
Run Code Online (Sandbox Code Playgroud)

PyCharm 在这种情况下不会抱怨。