2017-03-16 146 views
2

有一個字典mydict與ID號作爲鍵和值一些字符串。我試圖讓所有其他值在mydict之間進行比較。從另一個詞典(Python)的所有組合創建詞典

然後,保存那些比較的結果在另一字典myresultsdict,其中每個鍵將持有該對相比 ID號和字符串比較作爲其值的實際結果。

我知道如何通過itertools的組合來獲得組合,但是很難拼湊上面提到的myresultsdict。就本例而言,我使用簡單的編輯距離(Levenshtein.distance),其結果將是'myresultsdict'的值。

from itertools import combinations 
import Levenshtein 

mydict = {'01': "stringstringstringblah", 
      '02': "blahstringstringstringblah", 
      '03': "stringstringstringblahblahblah"} 

可能有人提供一些提示如何我可以構建myresultsdict具有比較用戶ID串的元組(即('01','02')('01','03')等),並且每個與它們各自的編輯距離的結果作爲其鍵?

(道歉,我不能提供我嘗試更多的代碼,因爲所有我能弄清楚如何使用一個列表來找到,沒有字典的組合辦)

回答

1

下面是一個簡單解決方案實現你的任務。我通過mydict鍵使用combinations,它返回你想要的元組。對於每個元組,我計算距離,然後用相應的結果更新myresultsdict

請注意,如果字典中已經存在元組,則以前的值(即距離)將被覆蓋。

from itertools import combinations 
import Levenshtein 

mydict = {'01': "stringstringstringblah", 
      '02': "blahstringstringstringblah", 
      '03': "stringstringstringblahblahblah"} 

myresultsdict = {} 
for a, b in combinations(mydict.keys(), 2): 
    myresultsdict[(a, b)] = Levenshtein.distance(mydict[a], mydict[b]) 

print(myresultsdict) 

,其輸出:

{('01', '02'): 4, ('03', '02'): 12, ('03', '01'): 8}