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

Pattern for finding maximum match in ordered-important list

我注意到我的项目中有一些重复出现的代码,涉及在列表中找到某个内容的 'best match',重要的警告是如果有平局,则选择第一个,即顺序很重要.

项目在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,但我觉得这比保证要复杂得多,考虑到原始解决方案是多么简单,尽管看起来很像 C。

理想情况下,我想要

highest_thing = highest(things, some_params)

无需自己编写此函数(这很好,但我忍不住认为有更好看的解决方案)。

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

使用 key 参数计算 highest_strength 值,max() 应该根据该值选择最高的东西:

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