在Python中,如何从字典的最高值随机打破平局?
我想返回字典中具有最高值的键,如果存在平局,则随机选择其中一个键。我知道如何获得最大值,但不知道如何打破平局在Python中,如何从字典的最高值随机打破平局?,python,python-3.x,list,dictionary,random,Python,Python 3.x,List,Dictionary,Random,我想返回字典中具有最高值的键,如果存在平局,则随机选择其中一个键。我知道如何获得最大值,但不知道如何打破平局 max(result, key = result.get) 这让我得到了最大值,但如果字典有一个平局,那么它只会给我它遇到的第一个 给定字典{'banana':3,'apple':2,'cherry':1,'orange':3} 输出必须给出香蕉或橙色,但必须是随机的。您可以构建一个反向字典: import random d = {'banana': 3, 'apple': 2,
max(result, key = result.get)
这让我得到了最大值,但如果字典有一个平局,那么它只会给我它遇到的第一个
给定字典{'banana':3,'apple':2,'cherry':1,'orange':3}
输出必须给出香蕉或橙色,但必须是随机的。您可以构建一个反向字典:
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]))
首先从dict中获取
max
值
import random
maxValue = max(result.values())
然后使用将所有具有最大值的键收集到列表中
现在从键
choice = random.choice(keys)
您可以使用groupby
+选项
:
from itertools import groupby
import random
d = {'banana': 3, 'apple': 12, 'cherry': 1, '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]))
您可以使用列表理解
、max
和随机
功能:
import random
data = {'banana': 3, 'apple': 2, 'cherry': 1, '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))
import random
result = {'banana': 3, 'apple': 2, 'cherry': 1, 'orange': 3}
keys = list(result.keys())
random.shuffle(keys)
print(max(keys, key=lambda k: result[k]))
我希望这有帮助,也很重要 尽管不能在字典中无序排列条目,但可以使用键构建一个列表,对其进行无序排列,然后应用max函数:
import random
data = {'banana': 3, 'apple': 2, 'cherry': 1, '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))
import random
result = {'banana': 3, 'apple': 2, 'cherry': 1, 'orange': 3}
keys = list(result.keys())
random.shuffle(keys)
print(max(keys, key=lambda k: result[k]))
max和shuffle都是快速功能。您如何获得所有感兴趣的键?你能先试试吗?这个很好用!不过,这有点超出了我的理解水平。有没有一种更简单的方法,用几行代码来编写它?有没有一种更简单或基本的方法?没有列表理解和仅for和if循环?您可以使用for循环和if条件将列表理解转换为更简单的形式。我已经更新了答案。我希望这会有所帮助。这会继续选择相同的答案,而不是像应该的那样交替回答。有什么办法吗?(顺便说一句,感谢您的更新)由于只有两个值具有3->香蕉
和橙色
,随机化有机会重复结果。每个结果都不会验证或检查上一次运行中显示的结果。单独在新文件中使用它时,这完全有效。但当我尝试将其实现到一个函数中时,其中“数据”来自doctring,它会连续50次拾取相同的数据。它在函数内部不起作用,我不明白为什么