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键的平均值。
最后一个很简单,但前两个比较困难。 我尝试使用max函数,但失败了。
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键的平均值。
最后一个很简单,但前两个比较困难。 我尝试使用max函数,但失败了。
使用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'})
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
参数。
(优雅+可读性) > 高效性
。 - Slater Victoroffstats
是一个列表。因此 value in stats.values()
会导致错误。 - aIKidstats
不是一个 list
... 从技术上讲,它是一个只有一个值的 set
,这本身就会出错,因为你不能在 set
中存储一个 dict
。 我假设额外的花括号是明显的打字错误。不确定你从哪里得到了 list
的东西。 - Slater Victoroffstats = {'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])
sum(float(x['load_1min']) for x in stats.values())/ len(stats)
- Ashwini Chaudhary