我有一组格式
的元组ref_set = [(a1,b1),(a2,b2),(a3,b3)...]
等等。我需要比较句子列表中的单词并检查它是否等于a1
,a2
,a3
..如果word == a1
,请将其替换为b1
}。如果是word == a2
,请替换为b2
,依此类推。
这是我的代码:
def replace_words(x): #function
for line in x: #iterate over lines in list
for word in line.split(): #iterate over words in list
for i,j in ref_set: #iterate over each tuple
if word == i: #if word is equal to first element
word = j #replace it with 2nd one.
结果我得到了None
;我知道我需要回复一些东西。
答案 0 :(得分:4)
不要使用元组列表。使用字典:
ref_map = dict(ref_set)
for line in x:
line = ' '.join([ref_map.get(word, word) for word in line.split()])
否则你有一个NxM循环;对于文本中的每个额外字词,或者在ref_set
中加倍您需要执行的迭代次数。
您的代码仅重新绑定word
,而不是替换line
中的字词;上面的列表推导产生了一个新的line
值。这不会替换x
中的行,但是你需要另一个列表理解:
x = [' '.join([ref_map.get(word, word) for word in line.split()]) for line in x]
从评论中可以看出x
不是句子列表,而是一个句子。在这种情况下,您只使用一行处理一个列表理解,如上面x
上的循环迭代:
def corrected(line):
return ' '.join([ref_map.get(word, word) for word in line.split()])