列表推导式if-else语法错误排查:无法实现类型分支逻辑
列表推导式语法错误排查与修正
你的问题出在列表推导式的语法结构上:
列表推导式里,if写在循环(for y in ...)后面时,作用是过滤元素——只保留满足条件的y,这时候不能跟else。而你要的是对每个y根据类型返回不同字典,属于分支表达式,得把判断逻辑放在推导式的最前面(也就是生成元素的位置)。
修正后的代码如下:
mylist = [ { 'matrice': x['matrice'], 'n': x['n'], 'id': x['id'], 'status': x['status'], 'events': [ # 把分支判断移到生成元素的位置,用三元表达式 {'date': y['timestamp'], 'type': y['type'], 'extradata': {'temp': y['temperature']}} if y['type'] == 'environmental' else {'date': y['timestamp'], 'type': y['type'], 'extra': {'Intensity_X': y['x_axis']}} for y in db.get_data(x['id']) # 可选:如果只想保留environmental和shock类型的元素,加过滤条件 if y['type'] in ('environmental', 'shock') ] } for x in older_stuff ]
补充说明:
- 三元表达式
A if 条件 else B放在循环前面,每个y都会被处理,返回对应的字典 - 如果需要排除掉既不是
environmental也不是shock的元素,就加上最后的if y['type'] in (...)过滤条件,否则所有y都会被生成对应的字典
内容的提问来源于stack exchange,提问作者Lol
相关产品推荐
相关产品推荐

