我在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()))
PyCharm在filter(lambda location: location[0] in labels, LOCATIONS.items())
上发出以下警告:
Unexpected type(s):
(Iterator[str])
Possible types:
(Mapping)
(Iterable[Tuple[Any, Any]])
我应该如何对警告采取行动?相同的表达式但在Dict[str, int]
上没有警告。所以我想这与LOCATIONS
是Dict[str, List[str]]
有关。
答案 0 :(得分:2)
这是PyCharm的误报。它认为过滤器将返回Iterator[str]
,情况并非如此,因为它的输入是dict_items
,它是一个Iterable[Tuple[Any, Any]]
。
您还可以像这样简化代码:
task_locations = {k: v for k, v in LOCATIONS.items() if k in labels}
在这种情况下,PyCharm不会抱怨。
答案 1 :(得分:0)
我看到Pycharm检测到过滤器(lambda位置:标签中的location [0],LOCATIONS.items())的输出是Iterater [str]。 但实际上它是Iterable [tuple],因此代码可以运行