擅长:python、mysql、java
<p>与其他评论一样,我不确定这样做是否有意义,但我认为这里有一个解决方案可以满足您的需要。这是非常低效的-O(n<sup>2</sup>),其中n是列表中的单词数-但我不确定是否有更好的方法来实现:</p>
<pre><code>data = [['hoose', 200],
["Bananphone", 10],
['House', 200],
["Bonerphone", 10],
['UniqueValue', 777]]
already_merged = []
for word, score in data:
added_to_existing = False
for merged in already_merged:
for potentially_similar in merged[0]:
if levenshtein(word, potentially_similar) < 5:
merged[0].add(word)
merged[1] += score
added_to_existing = True
break
if added_to_existing:
break
if not added_to_existing:
already_merged.append([set([word]),score])
print already_merged
</code></pre>
<p>输出为:</p>
^{2}$
<p>这种方法的一个明显的问题是,您正在考虑的单词可能与您已经考虑过的许多不同的单词集非常接近,但是这段代码只会将它合并到它找到的第一个单词集中。我投了+1票给<a href="https://stackoverflow.com/users/160206/space-c0wb0y">Space_C0wb0y's answer</a>;)</p>