Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何从字典的最高值随机打破平局?_Python_Python 3.x_List_Dictionary_Random - Fatal编程技术网

在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次拾取相同的数据。它在函数内部不起作用,我不明白为什么