从另一个字典的所有组合创建字典(Python)

时间:2017-03-16 16:52:03

标签: python-3.x dictionary combinations

拥有一个字典mydict,其中id号为键,值为某些字符串。我试图在mydict中的所有其他值之间比较每个值。

然后,将这些比较的结果保存在另一个字典myresultsdict中,其中每个键将包含比较的id号对和字符串比较的实际结果< / strong>作为其价值。

我理解如何通过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 个答案:

答案 0 :(得分:1)

以下是实现任务的简单解决方案。我在combinations键上使用了mydict,它返回了你想要的元组。对于每个元组,我计算距离,然后使用相应的结果更新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}