查找与字典中值列表的最低均值对应的键
Finding key that corresponds to the lowest mean of a list of values in a dictionary
我正在尝试创建一个函数,对于字典中的每个条目,取每个条目的值列表的平均值,returns 是对应于最低平均值的键。 如果列表中的任何位置都存在负值,它应该首先删除它们,然后正常计算均值。
例如:
least_mean({'Option1': [0, 1, 2], 'Option2': [8, 9, -9999],'Option3': [0, -9999, 5, 3]})
应该return 'Option1' 因为它的均值最低 1.5
我的尝试
def least_mean(string):
empty = []
for i in string:
empty.append((i,sum([j for j in string[i] if j > 0])/len([j for j in string[i] if j > 0])))
return empty
我创建了一个函数,该函数 return 是一个包含每个选项及其平均值的元组列表。但是,我不确定如何让这个函数本身更具体到 return 'Option1'。例如,在 returns
中插入 ({'Option1': [0, 1, 2], 'Option2': [8, 9, -9999],'Option3': [0, -9999, 5, 3]})
[('Option1', 1.5), ('Option2', 8.5), ('Option3', 4.0)]
但我想 'Option1' 一个人。如果可能的话,这可以在没有导入的情况下在一行列表理解中完成吗?
您可以使用带有自定义 key
参数的 min()
来查找与最小均值对应的键,忽略负值。不需要列表理解:
from statistics import mean
data = {'Option1': [0, 1, 2], 'Option2': [8, 9, -9999],'Option3': [0, -9999, 5, 3]}
result = min(data, key=lambda x: mean(filter(lambda x: x >= 0, data[x])))
print(result)
如果您不想使用 statistics
导入,您可以使用:
result = min(data, key=lambda x: sum(filter(lambda x: x >= 0, data[x])) \
/ sum(1 for _ in filter(lambda x: x >= 0, data[x])))
这输出:
Option1
如果您想添加到现有的提取最小选项的方法中,请使用:
data = [('Option1', 1.5), ('Option2', 8.5), ('Option3', 4.0)]
result, _ = min(data, key=lambda x: x[1])
print(result)
这也输出:
Option1
我正在尝试创建一个函数,对于字典中的每个条目,取每个条目的值列表的平均值,returns 是对应于最低平均值的键。 如果列表中的任何位置都存在负值,它应该首先删除它们,然后正常计算均值。
例如:
least_mean({'Option1': [0, 1, 2], 'Option2': [8, 9, -9999],'Option3': [0, -9999, 5, 3]})
应该return 'Option1' 因为它的均值最低 1.5
我的尝试
def least_mean(string):
empty = []
for i in string:
empty.append((i,sum([j for j in string[i] if j > 0])/len([j for j in string[i] if j > 0])))
return empty
我创建了一个函数,该函数 return 是一个包含每个选项及其平均值的元组列表。但是,我不确定如何让这个函数本身更具体到 return 'Option1'。例如,在 returns
中插入({'Option1': [0, 1, 2], 'Option2': [8, 9, -9999],'Option3': [0, -9999, 5, 3]})
[('Option1', 1.5), ('Option2', 8.5), ('Option3', 4.0)]
但我想 'Option1' 一个人。如果可能的话,这可以在没有导入的情况下在一行列表理解中完成吗?
您可以使用带有自定义 key
参数的 min()
来查找与最小均值对应的键,忽略负值。不需要列表理解:
from statistics import mean
data = {'Option1': [0, 1, 2], 'Option2': [8, 9, -9999],'Option3': [0, -9999, 5, 3]}
result = min(data, key=lambda x: mean(filter(lambda x: x >= 0, data[x])))
print(result)
如果您不想使用 statistics
导入,您可以使用:
result = min(data, key=lambda x: sum(filter(lambda x: x >= 0, data[x])) \
/ sum(1 for _ in filter(lambda x: x >= 0, data[x])))
这输出:
Option1
如果您想添加到现有的提取最小选项的方法中,请使用:
data = [('Option1', 1.5), ('Option2', 8.5), ('Option3', 4.0)]
result, _ = min(data, key=lambda x: x[1])
print(result)
这也输出:
Option1