Python PyCharm警告:字典上的筛选器的类型意外
我在PyCharm中有以下代码:Python PyCharm警告:字典上的筛选器的类型意外,python,pycharm,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对filterlambda位置发出以下警告:标签中的位置[0],LOCATIONS.item
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对filterlambda位置发出以下警告:标签中的位置[0],LOCATIONS.items:
我应该如何对警告采取行动?相同的表达式,但在Dict[str,int]上,没有警告。所以我猜这与位置是一个Dict[str,List[str]]有关。这是PyCharm的假阳性。它认为过滤器将返回迭代器[str],但情况并非如此,因为它的输入是dict_items,它是一个Iterable[Tuple[Any,Any]] 您还可以这样简化代码:
task_locations = {k: v for k, v in LOCATIONS.items() if k in labels}
在这种情况下,PyCharm不会抱怨。我看到PyCharm检测出过滤器的输出Lambda位置:标签中的位置[0],位置.items是迭代器[str]。
但实际上它是可编辑的[tuple],所以运行oke的代码谢谢。这就是我最后做的。此外,它允许我立即获得团队列表:teams_in_locations=[team for location,teams in locations.items if location in labels for team in teams]这显然是PyCharm中的一个bug。您应该简单地报告该bug,以便他们了解并修复它。
task_locations = {k: v for k, v in LOCATIONS.items() if k in labels}