假设我有一个数字列表,并且在此列表上应用了百分位数,它返回了以下字典
{100: 2004807.0, 75: 11600.0, 50: 2559.5, 25: 316.0}
然后我创建了以下函数以返回相应百分比值
def f(x):
return {
25: 316.0,
50: 2559.5,
75: 11600.0,
100: 2004807.0
}[x]
现在,以下函数返回值的排名
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可以做到吗?
答案 0 :(得分:1)
您可以从字典中构造一个按值排序的列表。除非您使用的是Python 3.7+,否则转换是必需的,因为不对字典进行排序。
然后在您的next
中使用lambda
和一个生成器表达式:
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
答案 1 :(得分:1)
在不更改f()
函数的情况下,我将next
与生成器一起使用,同时提供默认值100。
lambda y: next((x for x in [25, 50, 75] if y <= f(x)), 100)