我有一本字典,作者姓名为键,值为<div>
<b>veicles</b>
<i>car</i>
"Mustang"
"Ferrari"
"Mercedes"
<b>food</b>
<i>fruit</i>
"Apple "
"Orange"
<b>books</b>
<i>love</i>
"I love you"
</div>
。我想使用Fuzzywuzzy比较这些作者姓名,以查看是否可以合并相似的姓名。
到目前为止,我正在使用两个字典(两个字典中的数据都相同),然后使用双None
循环。我想进一步优化它,当时我正在考虑使用“字典组合”,但我不知道如何使用模糊比较逻辑来实现该功能。
我的代码在下面两个字典相同的地方。
词典示例为:
for
{'Trevor Jacobs': None, 'Josh Francis': None, 'Marcie Lank': None, 'Marcie H. Lank': None}
这是我到目前为止的代码。它可以工作,但是比我想象的要花更长的时间(约有700个键的字典大约需要4秒钟)
我的问题是如何使它更有效?有没有办法可以使用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)
或类似的方法来代替第二个if in dict
循环?
编辑: 我在下面的评论中采纳了建议,并将其发布在了Code Review中。如果找到答案,我会更新