我有一个二维数组,看起来像这样:
import pprint
import jellyfish
data = [['', 'Sir', 'Arthur', 'Of', 'Camelot'],
['Sir', None, None, None, None],
['Amel', None, None, None, None],
['Of', None, None, None, None],
['Camelot', None, None, None, None],
['Art', None, None, None, None],
['Sir', None, None, None, None],
]
for i, name in enumerate(data[0][1:]):
for others in data[1:]:
others[i+1] = jellyfish.jaro_winkler(others[0], name)
for i, row in enumerate(data):
if i < 1:
print(('{:<8}'*5).format(*row))
else:
print(('{:<8}'+'{:<8.1f}'*4).format(*row))
输出:
Sir Arthur Of Camelot
Sir 1.0 0.5 0.0 0.0
Amel 0.0 0.5 0.0 0.7
Of 0.0 0.0 1.0 0.0
Camelot 0.0 0.0 0.0 1.0
Art 0.0 0.8 0.0 0.0
Sir 1.0 0.5 0.0 0.0
我正在寻找的是独特的最大值。例如,在这种情况下,我希望看到类似的内容:
[Match(this_name='Sir', that_name='Sir', score=1.0),
Match(this_name='Of', that_name='Of', score=1.0),
Match(this_name='Camelot', that_name='Camelot', score=1.0),
Match(this_name='Art', that_name='Arthur', score=0.8),
]
请注意,Amel
和第二个Sir
丢失了。如果我要写出这个过程,它看起来像这样:
1.0
个,所以我们只需要第一个 - Sir
和Sir
)Of
和`Of)。Camelot
和Camelot
)Art
和Arthur
)我已经写了一个这样的递归形式,但是看起来很笨拙。可能只是因为 是解决问题的最佳方法,它只是感觉很尴尬。在很大程度上,我认为这是由于一些限制:
Art
和Amel
已消失,则第二个Sir
将映射到Arthur
,因此我不认为这样做会很简单(例如你有两个[或N] (1.0, 'Sir', 'Sir')
)。有没有更好的方法来解决我的问题?