我有一个列表,类似于以下o / p的1000行,我将存储在列表变量中。
现在我想在所有这些行中找到最大键和值
sensors ={'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheDiskGcLoad': 0, 'porscheLfsFixit': 0, 'porscheEncrypt': 0, 'porscheDiskGcReap': 0, 'porscheCompress': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 384, 'porscheCompress': 0, 'porscheDiskGcReap': 0, 'porscheEncrypt': 0, 'porscheRaidRebuild': 384, 'porscheDiskGcLoad': 0}
{'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheDiskGcLoad': 0, 'porscheLfsFixit': 0, 'porscheEncrypt': 0, 'porscheDiskGcReap': 0, 'porscheCompress': 0, 'porscheDiskWrite': 1796, 'porscheRaidRebuild': 389, 'porscheCompress': 0, 'porscheDiskGcReap': 50, 'porscheEncrypt': 0, 'porscheRaidRebuild': 3849, 'porscheDiskGcLoad': 0}
我尝试maxValue = max(传感器)
但我只得到这样的o / p:porscheDiskWrite
我希望所有线路的最大值如下:porscheDiskWrite':1796,porscheRaidRebuild':389等。
我需要将此r \ n转换为字典吗?
答案 0 :(得分:2)
我假设您的源结构是这样的,除了每个字典中有更多项目:
sensors = [{'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 384}, {'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 9999}]
为了获得key, value
对中所有项目中所有项目的最高值,我建议采用这种方法。
sensor_tuples = []
for sensor in sensors:
sensor_tuples += list(sensor.items())
max_pair = max(sensor_tuples, key= lambda x: x[1])
首先,您将所有配对放入一个列表中:
>>> sensor_tuples
[('porscheDiskWrite', 1786), ('porscheRaidRebuild', 384), ('porscheLfsFixit', 0), ('porscheDiskWrite', 1786), ('porscheRaidRebuild', 9999), ('porscheLfsFixit', 0)]
然后你找到最大值对:
>>> max_pair
('porscheRaidRebuild', 9999)
编辑:
回答评论中的问题。 要获得所有密钥的最大值,首先要定义一个函数,以便为一个密钥获取所有密钥的最大值:
def get_max_for_key(alist, key):
return max(alist, key=lambda x: x[key])[key]
获取所有密钥:
keys = sensors[0].keys()
为每个键调用函数并将结果放入dict:
max_dict = {}
for key in keys:
max_dict[key] = get_max_for_key(sensors, key)
我们走了:
>>> max_dict
{'porscheRaidRebuild': 9999, 'porscheLfsFixit': 0, 'porscheDiskWrite': 1786}
答案 1 :(得分:1)
如果你想根据dict的值得到最大值,你可以这样做:
sensors ={'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheDiskGcLoad': 0,
'porscheLfsFixit': 0, 'porscheEncrypt': 0, 'porscheDiskGcReap': 0,
'porscheCompress': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 384,
'porscheCompress': 0, 'porscheDiskGcReap': 0, 'porscheEncrypt': 0,
'porscheRaidRebuild': 384, 'porscheDiskGcLoad': 0}
my_max = max(sensors.items(), key=lambda x: x[1])
print(my_max)
>>> ('porscheDiskWrite', 1786)
因此,此示例中的输出是一个元组。
此外,您不需要将您的dict转换为使用max的列表,并且您也不需要将输出转换为列表以使用它。你可以将它保存为元组,并随心所欲地做任何事情。
PS:我使用max()
的关键函数,它是一个lambda
函数,它获取sensors.items()
每个元素的id = 1的元素。另外,请注意max()
的第一个元素必须是可迭代的。 sensors.items()
将返回[(key1, value1), ..., (keyN, valueN)]
答案 2 :(得分:0)
*如果您想要找到与零不同的所有值
sensors ={'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheDiskGcLoad': 0, 'porscheLfsFixit': 0, 'porscheEncrypt': 0, 'porscheDiskGcReap': 0, 'porscheCompress': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 384, 'porscheCompress': 0, 'porscheDiskGcReap': 0, 'porscheEncrypt': 0, 'porscheRaidRebuild': 384, 'porscheDiskGcLoad': 0}
>>> val = [(x,y) for x,y in sensors.items() if y>0]
>>> for v in val:
>>> print(v)
输出
('porscheRaidRebuild',384)
('porscheDiskWrite',1786)
>>> dic = {x:y for x,y in sensors.items() if y>0}
>>> dic
将其置于新的dictonary
输出
{'porscheDiskWrite':1786,'porscheRaidRebuild':384}