我遇到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个最高值之间的任何关系。
非常感谢! :-)
答案 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