我在 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]]。
这是 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 在这种情况下不会抱怨。