0

我有一个字典列表,其属性可能与列表中的其他字典重复或相似。我想使用相似度比较函数来唯一化这个列表。如果任何 dicts 对于键“greeting”的值在一定百分比内相似,则只应保留一个。

例如,在此列表中,我只希望保留一个“hello world”:

list = [{"greeting":"HELLO WORLD!", ...}, {"greeting":"Hello Mars", ...}, {"greeting":"Hello World!!!", ...}, {"greeting":"hello world", ...}]

唯一化后,结果将是:

list = [{"greeting":"HELLO WORLD!", ...}, {"greeting":"Hello Mars", ...}

应从列表中删除所有其他具有类似问候语的字典。保留哪些类似的字典并不重要。

这是Nadia Alramli的一个函数:

def similar(seq1, seq2):
    return difflib.SequenceMatcher(a=seq1.lower(), b=seq2.lower()).ratio() > 0.9
4

1 回答 1

0

使用确定唯一性的函数,您可以执行以下操作:

import difflib

def similar(seq1, seq2):
    return difflib.SequenceMatcher(a=seq1.lower(), b=seq2.lower()).ratio() > 0.9

def unique(mylist, keys):
    temp = mylist[:]
    for d in mylist:
        temp.pop(0)
        [d2.pop(i) for i in keys if d.has_key(i)
         for d2 in temp if d2.has_key(i) and similar(d[i], d2[i])] 
    return mylist

请注意,这将修改您的字典:

mylist = [{"greeting":"HELLO WORLD!"}, {"greeting":"Hello Mars"}, {"greeting":"Hello World!!!"}, {"greeting":"hello world"}]
unique(mylist, ['greeting'])

print mylist

输出:

[{'greeting': 'HELLO WORLD!'}, {'greeting': 'Hello Mars'}, {}, {}]
于 2012-06-14T20:53:37.623 回答