Python 最大潜在相同值

Python max on potential same values

我对 python 的 max() 函数有疑问。 这是我的情况:

results = {'left' : leftKeyCounter, 'right' : rightKeyCounter, 'front' : frontKeyCounter, 'back' : backKeyCounter}

finalScore = max(results, key=results.get)

print(finalScore, 'wins')

我遇到的问题是根据我的结果发生的情况设置 if 条件。比方说,我有

results = {'left' : 1, 'right' : 1, 'front' : 1, 'back': 0}

他会 return 'front wins' 的事实完全是随机的,我需要过滤那个结果。 (或之前?) 因此,如果它是 2 个最高结果之间的平局,他将取消它(例如)

实现这一目标的最简单方法是什么?我查看了 "counter" 但这并没有达到我打算在这里做的事情,因为我的数字已经打包,我只需要比较 4 个值,两个最高值之间没有任何联系。

非常感谢! :-)

翻一遍字典就可以找出正确的结果。用值反转键并跟踪最高分。如果有多个项目获得最高分,您可以return自定义消息。

在反转的时候,不能简单的{value: key for key, value in results.items()},因为如果两个值相同,会覆盖掉前一个。所以你必须将结果保存在一个列表中。归功于 scores.setdefault() 的 chepner。他还建议用 collections.defaultdict().

也可以达到同样的效果
def calculate_winner(d):
    scores = {}
    high_score = 0
    for key, value in d.items():
        scores.setdefault(value, []).append(key)
        if value > high_score:
            high_score = value
    results = scores[high_score]
    if len(results) == 1:
        return results[0]
    else:
        return 'TIE', results

示例:

>>> calculate_winner(results)
('TIE', ['front', 'right', 'left'])

编辑:如果你有一个小字典,你可以用更少的代码行来获得相同的结果,方法是做两遍:一次找到最大分数,一次过滤出优胜者。

def calcaluate_winner(d):
    max_value = max(d.values())
    winners = [key for key in d if d[key] == max_value]
    if len(winners) == 1:
        return winners[0]
    else:
        return 'TIE', winners