2015-07-14 2 views
1

я нечеткий соответствие списка названий фильмов и составлены их в другой список каждого сравнения наряду со значениями спичечных:Fuzzy матча рейтинге

>>> fuzzy_matches 
[(['White Warrior (Alpha Video)'], ['White Warrior (Alpha Video)'], 100), (['White Warrior (Alpha Video)'], ['White Warrior (Digiview Entertainment)'], 63), (['White Warrior (Alpha Video)'], ['White Warrior (Platinum)'], 78), (['White Warrior (Alpha Video)'], ['White Warrior (Platinum)/David And Goliath'], 63), (['White Warrior (Alpha Video)'], ['White Warrior (Platinum)/Duel Of Champions'], 61)]...etc 

Я хочу, чтобы сложить значение соответствия для каждого заголовка, так что я получите выход следующим образом:

>>>([White Warrior (Alpha Video)], 248), 
['White Warrior 2 (Digiview Entertainment)'], 390), 
etc... 

Я пробовал несколько реализаций, используя ломтики, но это уродливо.

(не мой точный код, но это уродство):

for x in range(len(fuzzed)): 
    for y in fuzzed(len(fuzzed)): 

big_dict[fuzzy_matches[55][0][0]]=fuzzy_matches[55][2] + fuzzy_matches[56][3]... 

, что является более эффективным способом для достижения этой цели?

+0

Просто, чтобы подтвердить, второй элемент в первых 6 строках имеет кавычки за пределами скобок, в то время как следующие 6 нет, правильно? – Manhattan

+0

Да, не уверен, почему мой список comp делает это, но я считаю, что это не повлияло на мой вывод –

+0

Можете ли вы просто распечатать список и дать результат в вопросе? –

ответ

1

Вы можете использовать dict для хранения нужных результатов, а затем в конце, если вы хотите получить список кортежей, вы можете использовать dict.items() (Python 3.x), чтобы получить это.

Пример -

>>> fuzzy_matches = [(['White Warrior (Alpha Video)'], ['White Warrior (Alpha Video)'], 100), (['White Warrior (Alpha Video)'], ['White Warrior (Digiview Entertainment)'], 63), (['White Warrior (Alpha Video)'], ['White Warrior (Platinum)'], 78), (['White Warrior (Alpha Video)'], ['White Warrior (Platinum)/David And Goliath'], 63), (['White Warrior (Alpha Video)'], ['White Warrior (Platinum)/Du 
el Of Champions'], 61)] 
>>> 
>>> fuzzy_dict = {} 
>>> for i in fuzzy_matches: 
...  if i[0][0] not in fuzzy_dict: 
...    fuzzy_dict[i[0][0]] = 0 
...  fuzzy_dict[i[0][0]] += i[2] 
... 
>>> fuzzy_dict 
{'White Warrior (Alpha Video)': 365} 
>>> list(fuzzy_dict.items()) 
[('White Warrior (Alpha Video)', 365)] 

Вам не нужно list(...) в конце концов, если вы используете Python 2.x.

+0

Это отлично. Спасибо. Я надеюсь, что еще многие люди увидят ваше решение и поймут ценность, которую он держит в ранжировании нечетких совпадений. –

+0

Рад, что я был полезен. –