python - 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很陌生,所以请原谅我的无知并感谢您的帮助!
解决方案
您的代码有几个问题:
- 你影子
sum
和dict
内置插件。永远不要这样做。 - 您正确计算了一组百分比,但没有将它们链接到键。
- 从您的密钥中检索加权样本是没有逻辑的。
内置random.choice
已经有这个功能。为了提高效率,您可以直接使用sum
withdict.values
并使用字典推导来计算权重。由于random.choices
返回一个列表,我们可以使用next
withiter
来提取唯一的元素。
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)
推荐阅读
- ionic-framework - 安装@angular/material 后,应用程序显示与missong 依赖相关的错误。但为什么
- visual-studio-code - 如何开始为 VS Code 创建语言扩展?
- csv - Julia Dash 简单示例的 JSON 错误
- javascript - 未捕获的类型错误:无法获取
- python - 如何检查python数据框中的日期是否在一定范围内
- azure - 使用 Azure 逻辑应用添加或修改 blob 时如何获取上传文件的文件名?
- r - 读取 csv 文件时如何解决“fmt”长度超过最大格式长度 8192 错误?
- python - 具有空白区域的 Librosa 频谱图
- javascript - ReactJS 从数组中删除项目会删除所有其他元素
- python - 有没有比使用 asyncio 的无限循环更好的方法来捕获“KeyboardInterrupt”?