python - 舍入到 python 字典中的键

标签 python dictionary rounding

以下代码的目的是返回输入直径的最小管道坡度。如果 DIA 输入(以米为单位)不在键值范围内,则代码将返回错误。

D_MINSLOPE = {100:60, 150:100, 225:300, 300:400, 375:550, 450:700, 525:750, 600:900, 675:1050, 750:1200, 825:1380, 900:1600, 1050:2000, 1200:2400, 1350:2800, 1500:3250, 1650:3700, 1800:4200}

def minslope(DIA):
    DIA_mm = round(DIA * 1000)
    Slope = 1/D_MINSLOPE[DIA_mm]
    return Slope

我目前将按照 this answered question 使用 'try/except' 'if/elif' 来解决不同基数(50、75、150)的问题。

有没有一种更Pythonic的方法来四舍五入到键值?

我注意到这个问题类似于 linked这是关于数组的。

最佳答案

IIUC,以下相关示例 question ,您可以在字典中搜索最接近的key。例如如果您想搜索 500:

min(D_MINSLOPE, key=lambda x:abs(x-500))

将返回525,它是字典键中最接近的值。

因此,您可以尝试将功能更改为:

def minslope(DIA):
    # convert Diameter (m) to Diameter (mm)
    DIA_mm = DIA * 1000        
    # get closest value
    DIA_cv = min(D_MINSLOPE, key=lambda x:abs(x-DIA_mm))   
    Slope = 1/D_MINSLOPE[DIA_cv]
    return Slope

关于python - 舍入到 python 字典中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765408/

相关文章:

c# - 将时间四舍五入到最接近的小时

C++舍入数字远离零

python - Azure 函数 (python) 将输出写入输出 blob 路径的动态命名

python - 如何在Python中将日期时间转换为字符串?

arrays - 如何使用属性观察器观察具有 Swift 集合类型的特定元素?

python - 如何在字典中存储多个值?

c# - 在不使用 Round 或 Truncate 的情况下舍入 Double

python - 有效比较两个不同大小的数组

python - 从 pandas 列的列表中删除字典

Python Pandas : equivalent to SQL's aggregate functions?