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键的平均值。
最后一个很简单 - 但前两个很难。 我试过了 最大功能但失败了。
答案 0 :(得分:7)
将key
参数用于min
和max
:
>>> 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()]
查找min
和max
以及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])