Python max与潜在相同的值

时间:2016-03-24 12:06:36

标签: python comparison max

我遇到python的max()函数问题。 这是我的情况:

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

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

print(finalScore, 'wins')

我遇到的问题是如果条件与我的结果有关。我们说,我有

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

他将返回前场胜利的事实'这是完全随机的,我需要过滤掉那个结果。 (或之前?) 因此,如果它是两个最高结果之间的平局,则取消它(例如)

最简单的方法是什么?我看着"柜台"但是这并没有实现我打算在这里做的事情,因为我的数字已经打包了,我只需要比较4个值,而不是2个最高值之间的任何关系。

非常感谢! :-)

1 个答案:

答案 0 :(得分:3)

通过字典一次,您可以找出正确的结果。使用值反转键并记录最高分。如果最高分数有多个项目,您可以返回自定义消息。

在倒车时,你不能简单地做{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'])

编辑:如果您有一个小字典,您可以通过两次传递以较少的代码行获得相同的结果:一个用于查找最高分数,另一个用于过滤获胜者。< / p>

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