0

dict1 と dict2 の 2 つの辞書があります。ディクショナリには、ID としてのキーと文字列としての値が含まれます。dict1 のすべての値と dict2 の他のすべての値のすべてのペア比較を実行する必要があります。

私は正常に動作している次のコードを使用していますが、非常に遅いです。私の実際のデータには、各辞書に約 100,000 の値が含まれています。同じことを行う他の「効率的な」方法はありますか。

import difflib
dict1 = {"111": "asdfa", "222":"gdjkgd", "333":"xvbkx"}
dict2 = {"311": "asdfa", "322":"gdjkzxgd", "333":"xvvbkx"}
qKeys = sorted(dict2.keys())
#Write the header in outfile
nline = "ref"+ "\t" + "\t".join(qKeys) + "\n"
print(nline)
for item in dict1:
    ratioArr = []
    refseq = dict1[item]
    for qitem in qKeys:
        qSeq = dict2[qitem]
        myratio = round(difflib.SequenceMatcher(None, refseq, qSeq).ratio(),2)
        ratioArr.append(str(myratio))
    #print(myratio)
    nline = item + "\t" + "\t".join(ratioArr)+"\n"
    print(nline)
4

1 に答える 1

1

私の提案は、まず、純粋な python である difflib よりも高速なものを使用することです。

レーベンシュタイン距離を使用できるかどうかを確認する必要があります。可能であれば、 pylevenshteinを使用できます。

最後に、どの文字列がどの文字列に一致するかを決定する問題があります。これは代入の問題です。これは、ハンガリーのアルゴリズムを使用して効率的に解決できます。このアルゴリズムの一般的に使用される実装はmunkresです。

于 2013-10-11T17:42:08.277 に答える