我有一本字典,其中作者姓名是None
的键和值。我想用fuzzyfuzzy来比较这些作者的名字,看看是否有相似的名字可以组合
到目前为止,我使用了两个字典(它们都有相同的数据),然后使用了双for
循环。我想进一步优化它,我想使用字典合成,但我不知道如何使用我的模糊比较逻辑
下面是我的代码,其中两个字典是相同的
例如:
{'Trevor Jacobs': None, 'Josh Francis': None, 'Marcie Lank': None, 'Marcie H. Lank': None}
import uuid
from fuzzywuzzy import fuzz
authorToDelete = {}
dictOfAllData1 = {'Trevor Jacobs': None, 'Josh Francis': None, 'Marcie Lank': None, 'Marcie H. Lank': None}
dictOfAllData2 = {'Trevor Jacobs': None, 'Josh Francis': None, 'Marcie Lank': None, 'Marcie H. Lank': None}
for key in dictOfAllData1:
for key2 in dictOfAllData2:
str1 = ' '.join(key.split()) #some spaces are different so I handle those here
str2 = ' '.join(key2.split())
ratio = fuzz.ratio(str1, str2)
if fuzz.ratio(str1, str2) > 85 and dictOfAllData1[key] == None:
dictOfAllData1[key] = uuid.uuid1()
elif ratio > 85:
if str1 != str2:
authorToDelete[key2] = None
else:
dictOfAllData1[key] = uuid.uuid1()
for deleteMe in authorToDelete:
dictOfAllData1.pop(deleteMe)
这是我目前掌握的代码。它可以工作,但所花的时间比我想象的要长(对于一本大约700个键的字典,大约需要4秒钟)
我的问题是,我如何才能使这更有效?有没有办法用if in dict
或类似的东西来代替我的第二个for
循环
编辑: 我采纳了下面评论中的建议,并将其发布在代码审阅中。如果我找到答案,我会更新
目前没有回答
相关问题 更多 >
编程相关推荐