返回模糊模糊匹配列表的索引

时间:2017-06-23 19:32:10

标签: python regex list fuzzywuzzy

我有一个' ID列表:

ids = [None, '20160928a', '20160929a', ... ]

以及某些特定内容的另一个列表'我发现使用fuzzywuzzy是重复的id:

repeat_offenders = ['20160928a', '20161115a', '20161121a', ... ]

我想再次使用fuzzywuzzy创建一个列表列表,其中包含重复ID位于列表中的位置(按索引)列表' ids'。所以输出看起来像这样(因为它们是重复的,列表中的每个列表至少包含两个元素:

collected_ids = [[0,5,700], [6,3], [4,826,12]]

我的尝试,目前只返回ID而不是id的位置:

collected_urls = []
for offender in repeat_offenders[:10]:
     best_match = process.extract(offender, ids)
     collection = []
     for match in best_match:
         if match[1] > 95:
            collection.append(match[0])
         else:
            pass
     collected_urls.append(collection)

更新,我尝试使用Moe的答案来查找/分组完全匹配:

idz = ids
collected_ids = []
for i in range(len(idz)):
    tmp = [i]
    for j in range(len(ids)):
        if idz[i] == idz[j] and i != j:
            tmp.append(j)
            del j 
    if len(tmp) > 1:
        collected_ids.append(tmp)
    del i

1 个答案:

答案 0 :(得分:1)

如果不必使用fuzzywuzzy,您可以使用两个for-loops来检查重复项,并生成list,如下所示:

collected_ids = []
for i in xrange(len(ids)):
    tmp = [i]
    for j in xrange(len(ids)):
        if ids[i] == ids[j] and i != j:
            tmp.append(j)
    if len(tmp) > 1:
        collected_ids.append(tmp)
collected_ids = list(set(collected_ids))

修改

如果您想避免重复,可以创建一个列表来检查索引是否已经添加,如下所示:

collected_ids = []
ids = ['a', 'b', 'a', 'c', 'd', 'a', 't', 't', 'k', 'c']
check = [] 
for i in range(len(ids)):
    tmp = [i]
    check.append(i)  
    for j in range(len(ids)):
        if ids[i] == ids[j] and i != j and j not in check:
            tmp.append(j)
            check.append(j)
    if len(tmp) > 1:
        collected_ids.append(tmp)
print(collected_ids)

输出:

[[0, 2, 5], [3, 9], [6, 7]]