提取max-min,其中每个键的值都是一个字典



我有以下内容,其中每个键的值都是字典本身:

dict = { "key1": { "sal":24000, "xy":32, "age":54}
         "key2": { "sal":40000, "xy":22, "age":14}
         "key3": { "sal":50000, "xy":12, "age":64} }

我想从这里提取最高和最低工资。即我的输出应该是24000当我搜索最小值和50000,当我搜索最大值时。

我该怎么做?非常感谢。

max(dict.itervalues(), key=lambda x: x['sal'])

最低限度也一样。

完整解决方案:

dic = {"key1": { "sal": 24000, "xy": 32, "age": 54},
       "key2": { "sal": 40000, "xy": 22, "age": 14},
       "key3": { "sal": 50000, "xy": 12, "age": 64} }
max_sal = max(dic.values(), key=lambda x: x['sal'])['sal']
min_sal = min(dic.values(), key=lambda x: x['sal'])['sal']
>>> max_sal
50000
>>> min_sal
24000

注意:不要使用dict作为变量名。它是内置的。

以下是使用operator.itemgetter:获得最高工资的另一种方法

max(dict.itervalues(), key=operator.itemgetter('sal'))

先提取工资,然后应用max:

max(d['sal'] for d in dict.itervalues())

另一种方法是使用列表理解来找到每个内部字典的max/min,然后返回所有这些的max/min:

最大值:max([max(dict[key].values()) for key in dict])

最小值:min([min(dict[key].values()) for key in dict])

您可以在一个调用中提取这两个值,从而减少dict值:

>>> dict = { "key1": { "sal":24000, "xy":32, "age":54},
         "key2": { "sal":40000, "xy":22, "age":14},
         "key3": { "sal":50000, "xy":12, "age":64} }
>>>import sys
>>>max, min = reduce(lambda (max, min), v: (max if max > v else v, min if min < v else v), [e["sal"] for e in dict.values()], (0, sys.maxint))
>>> max
50000
>>> min
24000

解释上面的代码:

Lambda函数,它获取一个具有最大值和最小值的元组以及一个值,如果条件被传递,则为所获取的值更改元组的值。

lambda (max, min), v: (max if max > v else v, min if min < v else v)

将dict中的所有工资纳入列表:

[e["sal"] for e in dict.values()]

reduce方法的初始元组值:

(0, sys.maxin)

CCD_ 6只是一个接一个地取值,以提供lambda函数。

最新更新