我有以下内容,其中每个键的值都是字典本身:
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函数。