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

时间:2020-01-16 18:10:36

标签: python loops dictionary iteration

我有一本字典,作者姓名为键,值为<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中。如果找到答案,我会更新

0 个答案:

没有答案