社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Potion Seller • 5 年前 • 1837 次点击  

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

max(result, key = result.get) 

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54049
文章 [ 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)