Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模糊匹配排序_Python_Fuzzy Search_Fuzzy Comparison - Fatal编程技术网

Python 模糊匹配排序

Python 模糊匹配排序,python,fuzzy-search,fuzzy-comparison,Python,Fuzzy Search,Fuzzy Comparison,我模糊匹配了一个电影标题列表,并将它们与匹配值一起编译到每个比较的另一个列表中: >>> fuzzy_matches [(['White Warrior (Alpha Video)'], ['White Warrior (Alpha Video)'], 100), (['White Warrior (Alpha Video)'], ['White Warrior (Digiview Entertainment)'], 63), (['White Warrior (Alpha V

我模糊匹配了一个电影标题列表,并将它们与匹配值一起编译到每个比较的另一个列表中:

>>> 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...
我已经尝试了好几次使用切片的实现,但都很难看

(不是我的确切代码,但这很难看):


实现这一点的更有效方法是什么?

您可以使用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)]

如果您使用的是Python 2.x,您不需要在结尾处使用
list(…)

只是为了确认,前6行中的第二项在括号外有引号,而下6行没有引号,对吗?是的,不确定我的list comp为什么要这样做,但我发现它没有影响我的输出。您可以打印列表吗,然后在问题中给出输出?@AnandSKumar我不明白你的问题模糊匹配列表,你能打印出来吗,你上面发布的一个看起来不像一个有效列表。这很好。谢谢-我希望更多的人看到你的解决方案,并认识到它在模糊匹配排名中的价值
>>> 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)]