У меня есть словарь с именами авторов в качестве ключей и значениями None
. Я хочу использовать fuzzywuzzy для сравнения имен этих авторов, чтобы увидеть, есть ли похожие, которые я могу объединить.
До сих пор я использую два словаря (они имеют одинаковые данные в обоих), а затем использую двойной for
л oop. Я хочу оптимизировать его дальше, и я думал об использовании словаря, но я не мог понять, как добиться этого с моей нечеткой сравнительной логикой c.
Мой код ниже, где два словаря идентичны.
Пример словаря:
{'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)
Это код, который у меня есть до сих пор. Это работает, но это занимает больше времени, чем я думаю (около 4 секунд со словарем из ~ 700 ключей)
Мой вопрос: как я могу сделать это более эффективным? Есть ли способ, которым я могу использовать if in dict
или что-то в этом роде вместо моего второго for
l oop?
Редактировать: я воспользовался советом в комментариях ниже и также опубликовал его в Code Review. Я буду обновлять, если я найду ответ