使用字典推导式从DataFrame提取数据时遭遇语法错误
问题分析与解决
你的代码语法错误出在字典推导式的条件逻辑位置。
原代码里的字典推导式写法:
levels = {k : dfl.at[k, 'tagvalue'] for k in addresses.keys() if k in dfl.index else 0}
不符合Python字典推导式的语法规则:字典推导式中,for循环后的if是用来过滤迭代元素的,只能保留满足条件的k,不能搭配else给不满足条件的k赋值。你要实现的是「所有addresses的键都保留,存在对应索引就取tagvalue,否则设为0」,这种分支逻辑应该放在值的表达式里,而非循环后的过滤条件。
修正方案一:调整三元表达式位置
把if...else移到值的部分,确保每个addresses的键都能被处理:
dfl = df1.loc[df1.tagkey.isin(['building:levels'])] levels = {k: dfl.at[k, 'tagvalue'] if k in dfl.index else 0 for k in addresses.keys()}
修正方案二:用Pandas原生方法更简洁
如果你习惯用Pandas的向量式操作,可以用reindex补全缺失索引并填充默认值,再转字典,代码更高效:
dfl = df1.loc[df1.tagkey.isin(['building:levels'])] levels = dfl['tagvalue'].reindex(addresses.keys(), fill_value=0).to_dict()
这里reindex(addresses.keys())会自动对齐所有addresses的键,缺失的索引用fill_value=0填充,最后直接转成字典即可。
内容的提问来源于stack exchange,提问作者Georgy Kiselev
相关产品推荐
相关产品推荐

