Python 比较两个列表,如果列表1中的条目与列表2中的条目相差x个字符,则将列表1条目替换为列表2条目

Python 比较两个列表,如果列表1中的条目与列表2中的条目相差x个字符,则将列表1条目替换为列表2条目,python,regex,list,replace,Python,Regex,List,Replace,我有两个列表,我将在下面给出一个粗略的示例,因为列表中有超过50k个条目 `location_names = ["London", "Uk", "Manchaster", "The City", "Jersey", "Hampshire", "East Midlands"] spell_list = ["London", "Ga

我有两个列表,我将在下面给出一个粗略的示例,因为列表中有超过50k个条目

`location_names = ["London", "Uk", "Manchaster", "The City", "Jersey", "Hampshire", "East Midlands"]
spell_list = ["London", "Gateshead", "Manchester", "Dorking", "London", "Northampton", "East London"]`

我想将这些列表中的每个条目与其在另一个列表中的对应条目进行比较,如果它们之间的差异小于x个字符,则用拼写列表中的对应条目替换位置名称中的条目

其中一些是拼写更正,而另一些则用完全不同的单词替换了这个单词,所以我只想用拼写错误替换这些单词,如果有意义的话

我想我需要用正则表达式来口述它,但我不知道该怎么说

编辑: 有一个有用的答案,但是,我认为它试图比较第一个列表中的1个条目与第二个列表中的所有条目

例如

我只希望它将1个列表中的1个条目与第二个列表中的1个条目进行比较

例如


任何帮助都将是巨大的感谢

SequenceMatcher将完美完成这项工作。。你可以试试这个

from difflib import SequenceMatcher

location_names = ["London", "Uk", "Manchaster", "The City", "Jersey", 
"Hampshire", "East Midlands"]
spell_list = ["London", "Gateshead", "Manchester", "Dorking", "London", 
"Northampton", "East London"]

def match_words(a, b):
    return SequenceMatcher(None, a, b).ratio()

for index, (location, spell) in enumerate(zip(location_names, spell_list)):
    if match_words(location, spell) >= 0.9:
        location_names[index] = spell

print(location_names)
输出:[‘伦敦’、‘英国’、‘曼彻斯特’、‘城市’、‘泽西’、‘汉普郡’、‘东米德兰’]


如果单词匹配率达到90%或以上,它将替换位置名称中的单词。

SequenceMatcher将完美地完成这项工作。。你可以试试这个

from difflib import SequenceMatcher

location_names = ["London", "Uk", "Manchaster", "The City", "Jersey", 
"Hampshire", "East Midlands"]
spell_list = ["London", "Gateshead", "Manchester", "Dorking", "London", 
"Northampton", "East London"]

def match_words(a, b):
    return SequenceMatcher(None, a, b).ratio()

for index, (location, spell) in enumerate(zip(location_names, spell_list)):
    if match_words(location, spell) >= 0.9:
        location_names[index] = spell

print(location_names)
输出:[‘伦敦’、‘英国’、‘曼彻斯特’、‘城市’、‘泽西’、‘汉普郡’、‘东米德兰’]


如果单词匹配率达到90%或更高,它将替换位置_名称中的单词。

请务必提及您尝试过的内容和不适合您的内容。@BethHooper,查看lib使用它查找字符串和替换之间的匹配比率。然而,我使用FuzzyWzzy获得拼写_列表,然而,它给出了一些非常疯狂的匹配,因为我最初给它比较的列表。请务必说明您尝试了什么,哪些不适合您。@BethHooper,查看lib使用它来找到字符串和替换之间的匹配比率。然而,我使用FuzzyWzzy获得拼写列表,然而,它给出了一些非常疯狂的匹配,因为我给了它最初比较的列表。我已经让进度条工作,它说在我的完整列表上运行此代码的ETA是11小时。。。。。这似乎需要很长时间,是否需要这么长的时间?是否有更有效的方法?您可以使用ProcessPoolExecutor。。这将大大减少时间,这取决于计算机的处理能力。我认为它正在发生的是,它正在比较1个location\u names条目和location\u拼写中的所有条目。。。。但我只想比较1个位置名称条目和1个位置拼写条目。。。。例如:list1[0]、list2[0]| list1[1]、list2[1]| list1[2]、list2[2]等等,如果这有意义的话,请理解..现在检查编辑的代码,现在不应该花费那么多时间,你仍然可以使用
ProcessPoolExecutor
来减少运行时间。我已经让进度条工作了,它说在我的完整列表中运行此代码的预计时间是11小时。。。。。这似乎需要很长时间,是否需要这么长的时间?是否有更有效的方法?您可以使用ProcessPoolExecutor。。这将大大减少时间,这取决于计算机的处理能力。我认为它正在发生的是,它正在比较1个location\u names条目和location\u拼写中的所有条目。。。。但我只想比较1个位置名称条目和1个位置拼写条目。。。。例如:list1[0]、list2[0]| list1[1]、list2[1]| list1[2]、list2[2]等等,如果这有意义的话,请理解..现在检查编辑的代码,现在应该不会花费太多时间,仍然可以使用
ProcessPoolExecutor
来减少运行时间。。
from difflib import SequenceMatcher

location_names = ["London", "Uk", "Manchaster", "The City", "Jersey", 
"Hampshire", "East Midlands"]
spell_list = ["London", "Gateshead", "Manchester", "Dorking", "London", 
"Northampton", "East London"]

def match_words(a, b):
    return SequenceMatcher(None, a, b).ratio()

for index, (location, spell) in enumerate(zip(location_names, spell_list)):
    if match_words(location, spell) >= 0.9:
        location_names[index] = spell

print(location_names)