Как использовать SequenceMatcher для групповой обработки? - PullRequest
1 голос
/ 28 октября 2019

Мне нужно сгруппировать записи в словаре по клавише «title», я делаю это так, как описано ниже.

data = INPUT FROM QUESTION
sorted_data = {}

def sorted_words(title):
    return ' '.join(sorted(title.lower().split(' ')))

for x in data:
    sorted_data.setdefault(sorted_words(x['title']), []).append(x)

for x, v in sorted_data.items():
    max_1 = max(v, key=lambda x:x['power'])
    max_2 = max(v, key=lambda x:x['fire'])

    sr = 1 / max_1['power'] + 1 / max_2['fire']
    if sr < 1:
        percentage = '{:.1%}'.format(1 / sr - 1)
        date = datetime.fromtimestamp(max_1['date']).strftime('%A, %B %d, %Y %H:%M:%S')

Ввод:

[{'title': 'Boby - Jake', 'date': 1572258900, 'power': 1.87, 'Fire': 1.985}, {'title': 'Boby - Jake', 'date': 1572264300, 'power': 1.51, 'fire': 2.65}, {'title': 'Lego - Riko', 'date': 1572256800, 'power': 1.65, 'fire': 2.31}]

Вывод:

{'- boby jake': [{'title': 'Boby - Jake', 'date': 1572258900, 'power': 1.87, 'Fire': 1.985}, {'title': 'Boby - Jake', 'date': 1572264300, 'power': 1.51, 'fire': 2.65}], '- lego riko': [{'title': 'Lego - Riko', 'date': 1572256800, 'power': 1.65, 'fire': 2.31}]}

Но, как вы понимаете, «Боби - Джейк» ~ «Боби С. - Джейк О.»Поэтому мне нужно использовать difflib в функции sorted_words.

import difflib

sim = difflib.SequenceMatcher(None,'Tobias Kamke - Momo Zver','Tobias K - Momo Z').ratio()
print(sim)

Сходство должно составлять примерно 70%

Вопрос: Как реализовать difflib с моим текущим кодом?

...