如何匹配for循环中以某个字母序列开头的所有单词?(蟒蛇)

Xenia Biagini

我有一本字典,里面有一些人格特质和相关的形容词:

personality={'sincerity': [ "tru", "honest"],'excitement': ['excit', 'fizzy']} 

(请注意,这要长得多)

我还有一本字典,其中包含从推文中提取的单词列表:

prova={"brand1": ["true", "truth", "thrutfull", "orange", "friend", "meaning"], "brand2": ["truth", "exiting", "excited", "lama", "lambo", "blade"]} 

我想将个性词典中的一个字符串与包含在prova词典中的该字符的所有字符串匹配:个性[sincerity]中的字符串“ tru”应该与prova [brand1]中的“ true”,“ truth”,“ truthful”匹配和prova [brand2]中的“真相”。

因为我有很多品牌,所以我想通过for循环这样做。有什么建议吗?

尼古拉斯·查兹斯

如果您要实现的目标是对@Wasif Hasan答案的评论中所描述的内容,而这与问题描述中的内容有所不同,则可以尝试:

>>> from collections import defaultdict
>>> import re
>>>
>>> personality = {
...     "sincerity": ["tru", "honest"],
...     "excitement": ["excit", "fizzy"]}
>>> prova = {
...     "brand1": ["true", "truth", "thrutfull", "orange", "friend", "meaning"], 
...     "brand2": ["truth", "exiting", "excited", "lama", "lambo", "blade"]}
>>>
>>> patterns = {k:re.compile(f"\s?({'|'.join(v)})") for k,v in personality.items()}
>>> results = defaultdict(dict)
>>>
>>> for k1, v1 in prova.items():
...     for k2, v2 in patterns.items():
...         results[k1][k2] = len(v2.findall(' '.join(v1)))
... 
>>> results
defaultdict(<class 'dict'>, {'brand1': {'sincerity': 2, 'excitement': 0}, 'brand2': {'sincerity': 1, 'excitement': 1}})
>>> results['brand1']
{'sincerity': 2, 'excitement': 0}

上面的代码首先创建一个dict正则表达式对象(请参阅参考资料patterns = ...)。dict具有相同的键,personality并且值是与中的值生成的模式相对应的对象personality例如,对于该图案sincerity"\s?(tru|honest)"构造了模式,以便以后可以搜索truhonest遵循no或一个空白。我使用模式在中搜索每个品牌的值中的匹配项prova为了计算发生次数,我从值中构造了一个字符串(例如forbrand1 ["true", "truth", "thrutfull", "orange", "friend", "meaning"]变为"true truth thrutfull orange friend meaning"),并用于len(findall)查找匹配数。

笔记:

  1. 我假设list与每个品牌相关联sprova没有重复项(或者,如果它们有重复项,您有兴趣对多次出现的单词计数)。如果不是这种情况,则需要' '.join(v1)使用更新set()以消除重复。
  2. 我还假设其中的字符串personality是您期望其中的单词prova开始的方式。相反,如果您正在各处寻找匹配项,则需要re.compile...通过删除进行更新\s?
  3. 在您的描述中,您有错字,即“ thrutfull”。这就是为什么即使您期望个性[sincerity]中的“ tru”与prova [brand1]中的“ true”,“ truth”,“ truthful”匹配,您在上面看到的还是有2个匹配(而不是3个匹配)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

RUBY:如何仅打印以某个字母开头的单词?

提取以某个字符开头的所有单词

如何获取bigquery中以某个字符开头的所有单词

匹配仅以某个字母开头,然后具有5个或更多非空格字符的单词

如何在不进行高级收集的情况下删除某个字母的所有出现?(蟒蛇)

使用正则表达式匹配不以某个字母开头的单词

查找具有多个字符字母的某个字母中的所有单词

如何打印列表中以某个字母开头的元素

如何搜索以某个字母开头的目录?

如何删除Excel列中某个字符之后的所有字母?

Excel 索引匹配 - 仅返回以某个字母开头的值

Excel VBA:如何将以某个字符开头的所有数据透视表项设置为false

如何在Linux中显示以某个字母开头的隐藏文件?

如果数组以某个字母开头,如何打印出数组中的名称

提取以某个字符开头的单词

是否有一个Regex表达式可以匹配某个字符串中所有出现的字母(除了某个字符串中)?

如何查找列名与某个字符串匹配的表的所有列名?(大查询)

使用sed删除每个单词中某个字符之后的所有内容

定位所有以某个字符串开头并以某个字符串结尾的zip文件

删除节点js中某个目录下所有名称以某个字符串开头的文件

如何获取以某个字符开头的字符串的字母,避免使用其他特殊字符

如何获取以某个字母开头但不属于子目录的文件的Linux目录列表?

有没有一种简单的方法来获取包含某个字母的最长单词?

如果管道输出中的任何行以带有Where-Object的powershell中的某个字符开头,则匹配

除了循环每个项目外,是否还有更好的方法来查找以某个字符开头的项目?

在Django中,如何查询某个字段的所有相关对象具有相同的值?

如何删除bash中某个字符之后的所有文本?

如何使用标准SQL删除BigQuery中某个字符之后的所有字符?

如何获取Django ORM中某个字段的所有值?