用于在有序重要列表中查找最大匹配的模式

时间:2015-03-25 16:59:21

标签: python design-patterns

我在项目中注意到了一些重复出现的代码,包括找到最佳匹配'对于列表中的某些内容,重要的警告是,如果存在平局,则选择第一个,即顺序很重要。

项目在python中,模式看起来像

things = <list of things>

highest_thing = None
highest_strength = 0

for thing in things:
    if thing.strength(some_params) > highest_strength:
        highest_thing = thing
        highest_strength = thing.strength(some_params)

我尝试使用内置的max函数执行此操作,使用字典理解来生成从thing到其strength的映射,但字典丢失了订单。然后我在Python中找到了OrderedDict,但是感觉这导致了比warrented更多的复杂性,考虑到原始解决方案的简单程度,尽管看起来非常像C语言。

理想情况下,我想要像

这样的东西
highest_thing = highest(things, some_params)

无需自己编写此功能(这很好,但我可以提供帮助,但我认为这是一个更好看的解决方案)。

1 个答案:

答案 0 :(得分:1)

您确实需要使用max()功能,但不需要使用字典。

使用key参数来计算highest_strength应该选择最高级别的max()值:

highest_thing = max(things, key=lambda thing: thing.strength(some_params))