如何在python中找到最小值和最大值

时间:2014-04-11 12:00:28

标签: python dictionary

我从键值对列表中找到最大值和最小值。为此,我为循环代码写了这个:

for key, values in groups.iteritems():
    MaxY = max(values)
    print 'Maximum Value of Y ='  
    print MaxY
    MaxX = max(values)
    print 'Maximum Value of X ='  
    print MaxX
    MaxZ = max(values)
    print 'Maximum Value of Z ='  
    print MaxZ

我想要这样的输出:

Y =

的最大值

X =

的最大值

Z =

的最大值

但是这样打印三次:

Maximum Value of Y =..
Maximum Value of X =..
Maximum Value of Z =..
Maximum Value of Y =..
Maximum Value of X =..
Maximum Value of Z =..
Maximum Value of Y =..
Maximum Value of X =..
Maximum Value of Z =..

我希望MaxX,MaxY,MaxZ中的值为最大值。

3 个答案:

答案 0 :(得分:3)

您正在打印max(values) 每次循环迭代,3次。因此,对于X,您打印max(values)三次,然后再次为Y执行此操作,再为Z再次执行。

每次迭代打印最多只一次,然后打印密钥而不是硬编码:

for key, values in groups.iteritems():
    valuemax = max(values)
    print 'Maximum Value of', key, '='
    print valuemax

换句话说,将重复留在循环中;这就是它的用途。

如果您想存储这些maximi,请使用新词典:

maximi = {}

for key, values in groups.iteritems():
    valuemax = max(values)
    print 'Maximum Value of', key, '='
    print valuemax
    maximi[key] = valuemax

不要尝试根据键设置新的局部变量;保护您的数据不受变量名称的影响。

答案 1 :(得分:1)

一个简单的解决方案是

MaxX = max(float(b) for (a, b) in groups if a == 'X')
MaxY = max(float(b) for (a, b) in groups if a == 'Y')
MaxZ = max(float(b) for (a, b) in groups if a == 'Z')

...但这需要迭代groups三个项目。效率不高。

答案 2 :(得分:0)

data = [('X', '62.811'), ('Y', '23.073'), ('Z', '231.341'), ('X', '78.351')]
dict_data = {}
for key, value in data:
    value = float(value)
    if key in dict_data:
        dict_data[key].append(value)
    else:
        dict_data[key] = [value]
max_data = {key: max(values) for key, values in dict_data.items()}

>>> max_data['X']
78.351
>>> max_data['Y']
23.073
>>> max_data['Z']
231.341