提取每个键的值为字典的最大值

时间:2015-12-31 10:02:29

标签: python dictionary

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

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

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

我该如何解决这个问题? 谢谢。

5 个答案:

答案 0 :(得分:3)

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

最低限度。

答案 1 :(得分:2)

完整解决方案:

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作为变量名称。它是一个内置的。

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

另一种方法是使用列表推导来查找每个内部字典的最大值/最小值,然后返回所有内容的最大值/最小值:

MAX:max([max(dict[key].values()) for key in dict])

MIN:min([min(dict[key].values()) for key in dict])

答案 4 :(得分:0)

您可以在一次调用中提取它们,从而减少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

解释上面的代码:

使用max和min以及值获取元组的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)

reduce只需一次接受lambda函数的值。