我有一本字典,里面有一些人格特质和相关的形容词:
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)"
。构造了模式,以便以后可以搜索tru
或honest
遵循no或一个空白。我使用模式在中搜索每个品牌的值中的匹配项prova
。为了计算发生次数,我从值中构造了一个字符串(例如forbrand1
["true", "truth", "thrutfull", "orange", "friend", "meaning"]
变为"true truth thrutfull orange friend meaning"
),并用于len(findall)
查找匹配数。
笔记:
list
与每个品牌相关联的sprova
没有重复项(或者,如果它们有重复项,您有兴趣对多次出现的单词计数)。如果不是这种情况,则需要' '.join(v1)
使用更新set()
以消除重复。personality
是您期望其中的单词prova
开始的方式。相反,如果您正在各处寻找匹配项,则需要re.compile...
通过删除进行更新\s?
。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句