Python 替换列表中的字符串
这是我上一篇文章的后续文章,我试图用另一个列表中的字符串替换一个列表中的字符串Python 替换列表中的字符串,python,replace,Python,Replace,这是我上一篇文章的后续文章,我试图用另一个列表中的字符串替换一个列表中的字符串 import numpy as np from difflib import SequenceMatcher from pprint import pprint def similar(a, to_match): percent_similarity = [SequenceMatcher(None, a, b).ratio() for b in to_match] max_value_index =
import numpy as np
from difflib import SequenceMatcher
from pprint import pprint
def similar(a, to_match):
percent_similarity = [SequenceMatcher(None, a, b).ratio() for b in to_match]
max_value_index = [i for i, j in enumerate(percent_similarity) if j == max(percent_similarity)][0]
map = [to_match[max_value_index] if max(percent_similarity) > 0.9 else a][0]
return map
if __name__ == '__main__':
strlist = ['D-saturn 6-pluto', np.nan, 'D-astroid 3-cyclone', 'DL-astroid 3-cyclone', 'DL-astroid', 'D-comment', 'literal']
to_match = ['saturn 6-pluto', 'pluto', 'astroid 3-cyclone', 'D-comment', 'D-astroid']
for item in strlist:
map = [similar(item, to_match) for item in strlist]
pprint(map)
预期产出:
['saturn 6-pluto', np.nan, 'astroid 3-cyclone', 'astroid 3-cyclone', 'D-astroid', 'D-comment', 'literal']
如果strlist
中没有np.nan
,则代码可以工作。
我想检查字符串是否为nan
,如果存在则返回nan
。
但是,我不知道如何在列表中使用elif
语句,如果max(相似性百分比)>0.9,则理解map=[to\u match[max\u value\u index]
有人能帮我吗?编辑:
那么,如果项目的类型不是字符串,那么将类似的函数更改为返回项目本身如何
def similar(a, to_match):
if type(a) is not str:
return a
percent_similarity = [SequenceMatcher(None, a, b).ratio() for b in to_match]
max_value_index = [i for i, j in enumerate(percent_similarity) if j == max(percent_similarity)][0]
ret = [to_match[max_value_index] if max(percent_similarity) > 0.9 else a][0]
return ret
在for循环中处理之前,您可以通过以下方式过滤strlist
strlist = [s for s in strlist if type(s) is str]
您可以在其他映射函数中编写if-else
map = [similar(item, to_match) if isinstance(item, str) else item for item in strlist]
不,我想保留nan
值。输入实际上是一个dataframe列,我必须用新列表替换所有的值。好的,但是试着在示例中进行简化,下次不要偏离您的需要太远。如果您的输入值是一个数据帧,您也可以(例如)简单地内联编写,例如df['astro_stuff'][~df.astro_stuff.isna()]
来处理有效的条目,同时保持数据帧的原样。offtopic但重要提示:请不要使用python关键字,如map
作为变量名