0

リスト内の他のdictと重複または類似している可能性のあるプロパティを持つdictのリストがあります。このリストを一意にするために、類似度比較関数を使用したいと思います。いずれかの dict の値が、キー「greeting」に対して一定の割合内で互いに類似している場合は、1 つだけを保持する必要があります。

たとえば、このリストでは、「hello world」の 1 つだけを残します。

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 に答える