如何用apply和lambda简化基于字典的URL关键词提取代码?
用apply+Lambda简化关键词提取逻辑
当然可以!你的需求完全能用apply结合lambda表达式实现,而且能大幅精简代码量,同时保留原有的逻辑。
先回顾下你原来的函数逻辑:针对每行的domain,从对应的关键词列表里找到第一个出现在url中的关键词,找不到则返回None。我们可以用生成器表达式+next()函数把这个逻辑压缩到lambda里。
实现代码
假设你的DataFrame名为df,包含domain和url列,生成新列的代码如下:
df['extracted_keyword'] = df.apply( lambda row: next( (kw for kw in brand_dict.get(row['domain'], []) if kw in row['url']), None ), axis=1 )
代码解释
brand_dict.get(row['domain'], []):安全获取当前domain对应的关键词列表,如果domain不在字典中,返回空列表避免KeyError。- 生成器表达式
(kw for kw in ... if kw in row['url']):遍历该domain的关键词,筛选出存在于当前url中的项。 next(..., None):取出生成器的第一个匹配项;如果没有任何关键词匹配,就返回None,和你原函数的行为完全一致。
效果验证
比如你的DataFrame里有这样一行:
| domain | url |
|---|---|
| bmw | https://bmw.com/3er/specs/ |
运行代码后,extracted_keyword列会得到/3er/,和原函数的输出一致。
内容的提问来源于stack exchange,提问作者s_khan92
相关产品推荐
相关产品推荐

