python 使用 lambda 将列表中的值从列表百分位中排名

python rank a value from list out of the list percentile using lambda

假设我有一个数字列表,我在这个列表上应用了百分位数,return是以下字典

{100: 2004807.0, 75: 11600.0, 50: 2559.5, 25: 316.0}

然后我创建了以下函数来return相应的百分比值

def f(x):
    return {
        25: 316.0,
        50: 2559.5,
        75: 11600.0,
        100: 2004807.0
    }[x]

现在下面的函数return是一个值的排名

def rank(y):
    if y <= f(25):
        return 25
    elif y <= f(50):
        return 50
    elif y <= f(75):
        return 75
    else:
        return 100

使用 python lambda 是否可行?

您可以从字典中构建一个按值排序的列表。这种转换是必要的,因为字典没有排序,除非您使用 Python 3.7+.

然后在 lambda:

中使用 next 和生成器表达式
d = {100: 2004807.0, 75: 11600.0, 50: 2559.5, 25: 316.0}
d_rev = sorted(d.items(), key=lambda x: x[1])

val = 2000
res = (lambda x: next((k for k, v in d_rev if x <= v), 100))(val)

print(res)
# 50

在不更改 f() 函数的情况下,我将 next 与生成器一起使用,同时提供默认值 100。

lambda y: next((x for x in [25, 50, 75] if y <= f(x)), 100)