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

Python 字典或列表是适合我的o/p的数据结构?,python,python-3.x,Python,Python 3.x,我有一个类似于1000行以下o/p的列表,我存储在一个列表变量中 现在我想找到所有这些行的最大键和值 sensors ={'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheDiskGcLoad': 0, 'porscheLfsFixit': 0, 'porscheEncrypt': 0, 'porscheDiskGcReap': 0, 'porscheCompress': 0, 'porscheDiskWrite': 1786, 'p

我有一个类似于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(传感器)

但我只得到这样的o/p:porscheDiskWrite

我想要所有行的最大值,比如:porschediskrite':1796,porscheRaidRebuild':389等等


是否需要将此r\n转换为字典?

如果您希望基于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
函数,用于获取
传感器的每个元素的id=1的元素。items()
。另外,请注意
max()
的第一个元素必须是iterable。和
sensors.items()
将返回一个元组列表,如
[(key1,value1),…,(keyN,valueN)]

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

sensors = [{'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 384}, {'porscheLfsFixit': 0, 'porscheDiskWrite': 1786, 'porscheRaidRebuild': 9999}]
为了获得
键,我建议使用这种方法,将value
与所有dict中所有项的最高值配对

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}

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

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年)

将其放入新的口述中

输出


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

您的dict中有重复项,但是dict有唯一的键,因此您的
“porscheRaidRebuild'
将被覆盖。此外,还不清楚传感器是什么类型的结构。如果您想根据dict的值获得最大值,您可以这样做:
max(sensors.items(),key=lambda x:x[1])
@ChihebNexus-谢谢,有没有办法将列表转换为字典以执行您提到的操作?我不确定此输出是否是列表或字典,因此问题谢谢您的详细回答,是否可以扩展此输出以获得所有可能键值的最大值,如('porscheRaidRebuild',9999),'porschediskrite':1786,“porscheRaidRebuild”:9999寻找所有可能的钥匙?@sudeepmathew在这一点上,我建议你看看熊猫。您的结构非常适合网格(pandas中的数据帧),您的两个问题都可以通过pandas中的单个函数调用来解决。如果你要经常使用这样的数据,那么你就应该真正地考虑熊猫。@苏迪马修我会编辑答案来添加你的第二个问题。请注意,这是一个非常简单的操作。如果你不知道怎么做,你应该试着一行一行地运行我的代码,并简化它以便你理解。非常感谢,我认为这应该行得通,我会试试这个
>>> dic = {x:y for x,y in sensors.items() if y>0}
>>> dic