PyCharm警告:字典中过滤器的类型异常

时间:2020-05-14 08:43:39

标签: 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()))

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]上没有警告。所以我想这与LOCATIONSDict[str, List[str]]有关。

2 个答案:

答案 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],因此代码可以运行