python - python如果多个字符串返回句子中包含的单词
问题描述
我有一个单词列表,我想做 if 语句,下面是我的列表:
list = ['camera','display','price','memory'(will have 200+ words in the list)]
这是我的代码:
def check_it(sentences):
if 'camera' in sentences and 'display' in sentences and 'price' in sentences:
return "Camera/Display/Price"
if 'camera' in sentences and 'display' in sentences:
return "Camera/Display"
...
return "Others"
h.loc[:, 'Category'] = h.Mention.apply(check_it)
这些组合会太多,而且我想让单词单独返回到行。有谁知道如何制作这个样本并单独返回单词而不是“相机/显示器/价格”?
解决方案
由正则表达式使用str.findall
- 将列表的所有值与|
,最后一个str.join
值连接/
:
df = pd.DataFrame({'Mention':['camera in sentences and display in sentences',
'camera in sentences price']})
L = ['camera','display','price','memory']
pat = '|'.join(r"\b{}\b".format(x) for x in L)
df['Category'] = df['Mention'].str.findall(pat).str.join('/')
print (df)
Mention Category
0 camera in sentences and display in sentences camera/display
1 camera in sentences price camera/price
另一个具有列表理解的解决方案,也用于列表使用生成器join
:
df['Category1'] = [[y for y in x.split() if y in L] for x in df['Mention']]
df['Category2'] = ['/'.join(y for y in x.split() if y in L) for x in df['Mention']]
print (df)
Mention Category1 \
0 camera in sentences and display in sentences [camera, display]
1 camera in sentences price [camera, price]
Category2
0 camera/display
1 camera/price
推荐阅读
- excel - 循环遍历多个 excel 文件并从每个文件下载数据的宏
- javascript - 如何将对象数组推入数组
- c# - SqlBulkCopy 失败,KeepIdentity 设置为 true
- python - Python没有正确响应用户输入
- apache-spark - Databricks 创建一个数据框列表及其大小
- excel - 如何从excel中的登录和注销计算总工作时间和休息时间?
- javascript - angularjs指令可以编译分配第二个指令的新元素吗
- kubernetes - 是否可以通过 https 入口访问 Kubernetes API?
- python - 如何访问 pytest.parametrize 中的测试索引
- amazon-web-services - ec2 用户数据脚本仅部分执行