如何简写pandas中基于字典匹配查询返回对应键的函数代码
问题对应解决方案
错误原因
你尝试的写法混淆了生成器推导式和三元表达式的语法结构,Python不支持直接在外层拼接else返回默认值的写法。
正确一行式实现
使用next()的默认返回参数即可完美匹配你原函数的逻辑,代码如下:
def getModelType(row): return next((key for key, value in models.items() if row.MODEL in value), row.MODEL)
逻辑说明:next()会迭代传入的生成器,返回第一个符合匹配条件的key;如果遍历完所有models键值对都没有匹配项,就直接返回第二个参数的默认值row.MODEL,和你最初的循环实现逻辑完全一致。
高性能优化方案
如果处理的数据量较大、或者models字典的条目较多,建议提前构建反向查找映射,避免每次调用函数都遍历整个models字典,性能提升非常明显:
# 仅需构建一次的反向查找映射 model_mapping = {model_val: key for key, val_list in models.items() for model_val in val_list} def getModelType(row): return model_mapping.get(row.MODEL, row.MODEL)
内容的提问来源于stack exchange,提问作者RobinMarks
相关产品推荐
相关产品推荐

