将字典键与同一字典中的所有其他键进行比较

2024-06-28 11:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,其中作者姓名是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循环

编辑: 我采纳了下面评论中的建议,并将其发布在代码审阅中。如果我找到答案,我会更新


Tags: key代码innonefor字典ratiotrevor