交替查找替换词 python
alternating find replace words python
这是我目前的代码
replace_listA = {'Bear': [Black, Woods], 'Duck': [Bird, Feathers]}
replace_listB = {'Bear': [Grizzly, Woods], 'Duck': [Quack, Feathers]}
replace_listC = {'Bear': [Grizzly, Black], 'Duck': [Quack, Bird]}
with open("main.txt") as main:
words = main.read().split()
replaced = []
for y in words:
replacement = replace_listA.get(y, y)
replaced.append(replacement)
text = ' '.join(replaced)
print (text)
new_main = open("main.txt", 'w')
new_main.write(text)
new_main.close()
我需要做的两件事是,每次出现 Bear 或 Duck 一词时,我都希望代码使用第一个值,然后将其从列表中删除。所以以 replace_listA 为例,第一个单词 Bear 被替换为“Black”,第二个被替换为“Woods”。
这是第一件事,
第二件事是当两个值都已用于 Bear of Duck 并且需要一个新值时,然后在 3 个替换列表之间轮换,(两个值都已用于“Bear”并且 Bear 这个词有再来一次)
所以一个单词列表
Duck Bear Bear Duck Duck Bear Bear Bear Bear Duck Bear Bear Duck Duck Bear Bear Bear
会变成
Bird Black Woods Feathers Quack Grizzly Woods Grizzly Black Quack Black Woods Bird Feathers
因为每个列表都会依次替换
replace_listA
Duck Bear Bear Duck
Bird Black Woods Feathers
replace_listB
Duck Bear Bear
Quack Grizzly Woods
replace_listC
Bear Bear Duck
Grizzly Black Quack
replace_listA
Bear Bear Duck Duck
Black Woods Bird Feathers
我建议你使用一个字典列表,这个列表将是你要做的连续替换,你可以循环这个列表:
words_input = "Duck Bear Bear Duck Duck Bear Bear Bear Bear Duck Bear Bear Duck Duck"
replacements = [{'Bear': ["Black", "Woods"], 'Duck': ["Bird", "Feathers"]},
{'Bear': ["Grizzly", "Woods"], 'Duck': ["Quack", "Feathers"]},
{'Bear': ["Grizzly", "Black"], 'Duck': ["Quack", "Bird"]}]
output = []
index_replace = 0
count_replace = {key: 0 for key in replacements[0].keys()}
for word in words_input.split():
if count_replace[word] == len(replacements[index_replace][word]):
# We need to cycle through the replacements
index_replace = (index_replace + 1) % len(replacements)
count_replace = {key: 0 for key in replacements[0].keys()}
idx_word = count_replace[word]
output.append(replacements[index_replace][word][idx_word])
count_replace[word] += 1
output_words = ' '.join(output)
print(output_words)
# Bird Black Woods Feathers Quack Grizzly Woods Grizzly Black Quack Black Woods Bird Feathers
(请注意,您的示例似乎并不完全准确,因为最后一个“Bear Bear Bear”并未翻译成您的原文post)
这是我目前的代码
replace_listA = {'Bear': [Black, Woods], 'Duck': [Bird, Feathers]}
replace_listB = {'Bear': [Grizzly, Woods], 'Duck': [Quack, Feathers]}
replace_listC = {'Bear': [Grizzly, Black], 'Duck': [Quack, Bird]}
with open("main.txt") as main:
words = main.read().split()
replaced = []
for y in words:
replacement = replace_listA.get(y, y)
replaced.append(replacement)
text = ' '.join(replaced)
print (text)
new_main = open("main.txt", 'w')
new_main.write(text)
new_main.close()
我需要做的两件事是,每次出现 Bear 或 Duck 一词时,我都希望代码使用第一个值,然后将其从列表中删除。所以以 replace_listA 为例,第一个单词 Bear 被替换为“Black”,第二个被替换为“Woods”。
这是第一件事,
第二件事是当两个值都已用于 Bear of Duck 并且需要一个新值时,然后在 3 个替换列表之间轮换,(两个值都已用于“Bear”并且 Bear 这个词有再来一次)
所以一个单词列表
Duck Bear Bear Duck Duck Bear Bear Bear Bear Duck Bear Bear Duck Duck Bear Bear Bear
会变成
Bird Black Woods Feathers Quack Grizzly Woods Grizzly Black Quack Black Woods Bird Feathers
因为每个列表都会依次替换
replace_listA
Duck Bear Bear Duck
Bird Black Woods Feathers
replace_listB
Duck Bear Bear
Quack Grizzly Woods
replace_listC
Bear Bear Duck
Grizzly Black Quack
replace_listA
Bear Bear Duck Duck
Black Woods Bird Feathers
我建议你使用一个字典列表,这个列表将是你要做的连续替换,你可以循环这个列表:
words_input = "Duck Bear Bear Duck Duck Bear Bear Bear Bear Duck Bear Bear Duck Duck"
replacements = [{'Bear': ["Black", "Woods"], 'Duck': ["Bird", "Feathers"]},
{'Bear': ["Grizzly", "Woods"], 'Duck': ["Quack", "Feathers"]},
{'Bear': ["Grizzly", "Black"], 'Duck': ["Quack", "Bird"]}]
output = []
index_replace = 0
count_replace = {key: 0 for key in replacements[0].keys()}
for word in words_input.split():
if count_replace[word] == len(replacements[index_replace][word]):
# We need to cycle through the replacements
index_replace = (index_replace + 1) % len(replacements)
count_replace = {key: 0 for key in replacements[0].keys()}
idx_word = count_replace[word]
output.append(replacements[index_replace][word][idx_word])
count_replace[word] += 1
output_words = ' '.join(output)
print(output_words)
# Bird Black Woods Feathers Quack Grizzly Woods Grizzly Black Quack Black Woods Bird Feathers
(请注意,您的示例似乎并不完全准确,因为最后一个“Bear Bear Bear”并未翻译成您的原文post)