2017-03-16 101 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}