Py学习  »  Python

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

Potion Seller • 5 年前 • 1712 次点击  

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

max(result, key = result.get) 

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

输出必须给出 banana orange ,但随机。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54049
 
1712 次点击  
文章 [ 4 ]  |  最新文章 5 年前
Samuel Muldoon
Reply   •   1 楼
Samuel Muldoon    5 年前

你可以建立一个反向字典:

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]))
Akash Swain
Reply   •   2 楼
Akash Swain    5 年前

你可以用 list comprehension , max random 功能:

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))

Austin
Reply   •   3 楼
Austin    5 年前

你可以用 groupby choice :

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]))
Deadpool
Reply   •   4 楼
Deadpool    5 年前

首先得到 max

import random
maxValue = max(result.values())

然后把所有的钥匙 list 使用 List Comprehensions

keys = [key for key, value in result.items() if value == maxValue]

keys

choice = random.choice(keys)