如何在Python中从字典的最高值随机打破平局?

我想返回字典中具有最高值的键,如果有平局,可以随机选择其中之一。我知道如何获得最大值,但不知道如何打破平局。

max(result,key = result.get) 

这为我带来了最大值,但是如果字典有平局,那么它只会给我带来的第一个

给出字典{'banana': 3,'apple': 2,'cherry': 1,'orange': 3}

输出必须为bananaorange,但必须是随机的。

FWBOOO 回答:如何在Python中从字典的最高值随机打破平局?

首先从字典中获取 <?php echo FileInput::widget([ 'name' => 'file_attachment','attribute' => 'file_attachment','options' => ['multiple' => true] ]); ?>

max

然后使用List Comprehensions将所有具有最大值的密钥收集到import random maxValue = max(result.values())

list

现在从keys = [key for key,value in result.items() if value == maxValue] 中获取随机值

keys
,

您可以构建反字典:

import random

d =  {'banana': 3,'apple': 2,'cherry': 1,'orange': 3}

d_inv = dict.fromkeys(d.values())
for dkey,dval in d.items(): 
    d_inv.setdefault(dval,list())
    d_inv[dval].append(dkey)

m = max(d.values())
print(random.choice(d_inv[m]))
,

您可以使用groupby + choice

from itertools import groupby
import random

d = {'banana': 3,'apple': 12,'orange': 12}

print(random.choice(max(((k,list(g)) for k,g in groupby(sorted(d,key=d.get),key=d.get)),key=lambda x: x[0])[1]))
,

您可以使用list comprehensionmaxrandom函数:

import random
data = {'banana': 3,'orange': 3}
result = [i for i,v in data.items() if v == max(data.values())]
print (random.choice(result))

# With simple for loop and if condition
result_1 = []
for i,v in data.items():
    if v == max(data.values()):
        result_1.append(i)
print (random.choice(result_1))

我希望这对您有所帮助!

,

虽然你不能打乱字典中的条目,但你可以用键构建一个列表,打乱它们,然后应用 max 函数:

import random

result = {'banana': 3,'orange': 3}
keys = list(result.keys())
random.shuffle(keys)
print(max(keys,key=lambda k: result[k]))

max 和 shuffle 都是快速函数。

本文链接:https://www.f2er.com/3140385.html

大家都在问