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
我对 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