首页 > 解决方案 > Python 函数在一定百分比的时间内返回一个值

问题描述

在一次采访中,我收到了以下我无法弄清楚的编码问题。从那以后我一直在考虑它,但我似乎无法弄清楚如何编写一个在给定百分比的时间内返回一个值的函数。

问题如下:

假设你有一个字典 dict = {'A': 10, 'B': 30, 'C': 60}。编写一个函数,在 10% 的时间返回“A”,在 30% 的时间返回“B”,在 60% 的时间返回“C”。因此,该函数应该接收一个值作为数字的字典(它们不一定必须加起来为 100),并且它应该返回该值的键,该键与该键占所有键总和的百分比相对应。

我知道如何启动该功能...

def percent_return(dict):
    sum = 0
    for key, value in dict.items():
        sum += float(value)
    percent_array = []
    for key, value in dict.items():
        percent = float(value) / sum
        percent_array.append(percent)
 ''' We now have an array with the associated percentages for the dictionary, 
but now I don't know how to actually apply this to the return values '''
    for key, value in dict.items():
        if (something that indicates given %):
            return key

我对python很陌生,所以请原谅我的无知并感谢您的帮助!

标签: pythonlistfunctiondictionarysample

解决方案


您的代码有几个问题:

  1. 你影子sumdict内置插件。永远不要这样做。
  2. 您正确计算了一组百分比,但没有将它们链接到键。
  3. 从您的密钥中检索加权样本是没有逻辑的。

内置random.choice已经有这个功能。为了提高效率,您可以直接使用sumwithdict.values并使用字典推导来计算权重。由于random.choices返回一个列表,我们可以使用nextwithiter来提取唯一的元素。

from random import choices

d_weights = {'A': 10, 'B': 30, 'C': 60}

def percent_return(d):
    val_sum = sum(d.values())
    d_pct = {k: v/val_sum for k, v in d.items()}
    return next(iter(choices(population=list(d_pct), weights=d_pct.values(), k=1)))

res = percent_return(d_weights)

推荐阅读