两个字典中字符串值的所有对比较

时间:2013-10-11 17:16:50

标签: python pandas

我有两个词典,dict1和dict2。 Dictionary包含键作为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)

1 个答案:

答案 0 :(得分:1)

我的建议是,首先使用比difflib更快的东西,这是纯python。

您应该检查是否可以使用levenshtein distance。如果可以,您可以使用pylevenshtein

最后,你遇到了决定哪个字符串匹配的问题 - 那是assignment problem。可以使用hungarian algorithm有效地解决它。该算法的常用实现是munkres