在多维dict中查找最大值,最小值

时间:2014-01-08 08:21:45

标签: python dictionary

stats = {{'node100': {'load_1min': '0.58'}, 'node200': {'load_1min': '0.64'}, 'node28': {'load_1min': '0.69'}}

我想找到 1.具有最大Load_1min值的键,
2.键最小Load_1min值,
3.统计数据的所有load_min键的平均值。

最后一个很简单 - 但前两个很难。 我试过了     最大功能但失败了。

3 个答案:

答案 0 :(得分:7)

key参数用于minmax

>>> min(stats, key=lambda k:float(stats[k]['load_1min']))
'node100'
>>> max(stats, key=lambda k:float(stats[k]['load_1min']))
'node28'

除了迭代键之外,它还会查找字典中的每个键。为了避免额外的查找:

>>> min(stats.items(), key=lambda (k,v):float(v['load_1min']))
('node100', {'load_1min': '0.58'})
>>> max(stats.items(), key=lambda (k,v):float(v['load_1min']))
('node28', {'load_1min': '0.69'})

答案 1 :(得分:2)

由于python列表本质上是无序的,并且你的数字恰好是字符串,你必须通过几个环节来正确地执行此操作,但这并不是太糟糕。

首先构造一个包含load_1min的所有值的列表,其中值被转换为浮点数而不是字符串:

all_values = [float(value['load_1min']) for value in stats.values()]

查找minmax以及average非常简单:

minimum = min(all_values)
max = max(all_values)
average = sum(all_values)/len(all_values)

再看看实际匹配的键:

max_key = [key for key, value in stats.items() if value['load_1min'] == max]

重复最小化非常简单。

如果您觉得它更容易理解,请使用此功能,但说实话,NPE的答案更为优雅。我自己甚至不知道key论证。

答案 2 :(得分:0)

stats = {'node100': {'load_1min': '0.58'}, 'node200': {'load_1min': '0.64'}, 'node28': {'load_1min': '0.69'}}
alist=[[float(value2) for item2, value2 in value.items()] for key,value in stats.items()]
results_val=(min(alist),max(alist))
print(results_val)

输出:

Min,     Max
([0.58], [0.69])