字典或列表是适合我的o/p的数据结构?

2024-09-28 23:39:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于1000行下面的o/p的列表,我存储在一个列表变量中。你知道吗

现在我想找出所有这些行的最大键和值

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(传感器)

但我只得到这样的订单:porscheDiskWrite

我想要所有行的最大值,比如:porscheDiskWrite':1796,porscheRaidRebuild':389等等。。你知道吗

我需要把这个r\n转换成字典吗?你知道吗


Tags: 订单列表字典传感器maxsensorsmaxvalueporschediskgcreap
3条回答

我假设您的源结构是这样的,除了每个dict中有更多的项:

sensors = [{'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 384}, {'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 9999}]

为了得到所有dict的所有项中具有最高值的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)

编辑:

从评论中回答问题。 要获取所有dict上所有键的最大值,请首先定义一个函数以获取一个键在所有dict上的最大值:

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}

如果要根据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,也不需要将输出转换成一个列表来使用max。你可以把它作为一个元组,想用它做什么都行。你知道吗

PS:我使用了一个带有max()的键函数,它是一个lambda函数,用于获取sensors.items()的每个元素的id=1的元素。另外,请注意max()的第一个元素必须是iterable。而sensors.items()将返回一个元组列表,如[(key1, value1), ..., (keyN, valueN)]

*如果要查找所有不同于零的值

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)

输出

(“porscheraid重建”,384)

('porscheDiskWrite',1786年)

>>> dic = {x:y for x,y in sensors.items() if y>0}
>>> dic

把它放进一个新的口述中

输出

{'porscheDiskWrite':1786,'porscheRaidRebuild':384}

相关问题 更多 >