我有兩個字典,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)
我會考慮使用[Pandas DataFrame](http://pandas.pydata.org/pandas-docs/dev/dsintro.html#dataframe)。你可以有一個ID的索引(在你的例子中是字典鍵)。然後執行一個外部聯接操作並應用一個與結果進行比較的函數。當然,有一些方法可以通過'dict'來實現,但是您似乎確實需要一些關於ID的關係邏輯,然後應用任意一段代碼(比較操作)。這就是熊貓擅長的。 – ely
謝謝@EMS,你介意給出一個關於如何做到這一點的簡單例子。 – user1140126
「水母」圖書館中的一個距離度量標準(也許是jaro)可能適用。這是一個[示例答案](http://stackoverflow.com/questions/19259553/letter-combinations-between-a-string-in-a-list/19259729#19259729),打印出一定距離的單詞,但你可以輕鬆地打印出距離本身...... – beroe