该研究的主题取自Text processing and detection from a specific dictionary in python主题。也许我误解了OP的问题,但我试图改进代码。所以,也许我的问题可能有点不同。在解释我想做什么之前,让我与你分享一些代码:
dict_1={"Liquid Biopsy":"Blood for analysis","cfDNA":"Blood for analysis"}
list_1=[u'Liquid', u'biopsy',u'based', u'on', u'circulating', u'cell-free', u'DNA', u'(cfDNA)', u'analysis', u'are', u'described', u'as', u'surrogate', u'samples', u'for', u'molecular', u'analysis.']
for i in dict_1:
if i.lower() in " ".join(list_1).lower():
print("Key: {}\nValue: {}\n".format(i,dict_1[i]))
这些代码可以从list_1
中编写的纯文本中捕获字典键。但是,当我使用这些代码学习时,我想知道如果某些字典键在list_1
中重复了。然后我在这个list_1
中写了两次相同的密钥。并且上述代码没有认识到重复的代码,程序给出了与下面相同的结果。
Key: cfDNA
Value: Blood for analysis
Key: Liquid Biopsy
Value: Blood for analysis
Process finished with exit code 0
然后我尝试更改我的方法并编写了一个不同的代码,如下所示:
dict_1={"Liquid Biopsy":"Blood for analysis","cfDNA":"Blood for analysis"}
list_1=[u'Liquid', u'biopsy',u'based', u'on', u'circulating', u'cell-free', "cfdna",u'DNA', u'(cfDNA)', u'analysis', u'are', u'described', u'as', u'surrogate', u'samples', u'for', u'molecular', u'analysis.']
for i in list_1:
for j in dict_1:
for k in j.split():
count=0
if k.lower() in i.lower():
count+=1
print("Key: {}\nValue: {}\nCount: {}\nDescription: Came from '{}'\n".format(j, dict_1[j],str(count),i))
但很明显,最后的代码会产生不良后果。如下所示,该程序可以捕获liquid
中的biopsy
和list_1
个单词。在cfDNA
中第二次写了list_1
,所以程序会抓到两次。但是有可能一次写出结果但总结了捕获时间吗?
Key: Liquid Biopsy
Value: Blood for analysis
Count: 1
Description: Came from 'Liquid'
Key: Liquid Biopsy
Value: Blood for analysis
Count: 1
Description: Came from 'biopsy'
Key: cfDNA
Value: Blood for analysis
Count: 1
Description: Came from 'cfdna'
Key: cfDNA
Value: Blood for analysis
Count: 1
Description: Came from '(cfDNA)'
Process finished with exit code 0
我希望你明白我想做什么。我想要捕获所有用文本写的密钥。而且我想计算多少次,这些键在文本中重复。
答案 0 :(得分:3)
如果我理解正确,您希望找到“关键字”出现在文本中的次数。您可以使用“re”模块。
import re
dict_1={"Liquid Biopsy":"Blood for analysis","cfDNA":"Blood for analysis", "asfdafaf":"dunno"}
list_1=[u'Liquid', u'biopsy',u'based', u'on', u'circulating', u'cell-free', "cfdna",u'DNA', u'(cfDNA)', u'analysis', u'are', u'described', u'as', u'surrogate', u'samples', u'for', u'molecular', u'analysis.']
text = ' '.join(list_1).lower()
for key in dict_1:
n = len(re.findall(key.lower(), text))
if n > 0:
print('Key:', key)
print('Value:', dict_1[key])
print('n:', n)
print()
答案 1 :(得分:0)
最近,我学会了一种新方法,用于计算字典键在纯文本中重复多少次而不导入“re”模块。也许在这个主题中加入另一种方法是合适的。
dict_1={"Liquid Biopsy":"Blood for analysis","cfDNA":"Blood for analysis"}
list_1=[u'Liquid', u'biopsy', u'liquid', u'biopsy',u'based',u'cfdna' ,u'on', u'circulating', u'cell-free', u'DNA', u'(cfDNA)', u'analysis', u'are', u'described', u'as', u'surrogate', u'samples', u'for', u'molecular', u'analysis.']
string_1=" ".join(list_1).lower()
for i in dict_1:
if i.lower() in string_1:
print("Key: {}\nValue: {}\nCount: {}\n".format(i,dict_1[i],string_1.count(i.lower())))
上述代码与导入re模块的方法给出的结果几乎相同。不同的是,它不会两次写密钥。所以它有点类似于第一篇文章中写的第一个代码结构。
Key: Liquid Biopsy
Value: Blood for analysis
Count: 2
Key: cfDNA
Value: Blood for analysis
Count: 2
Process finished with exit code 0