我有以下内容,其中每个键的值都是字典本身:
dict = { "key1": { "sal":24000, "xy":32, "age":54}
"key2": { "sal":40000, "xy":22, "age":14}
"key3": { "sal":50000, "xy":12, "age":64} }
我想从这里提取最高和最低工资。 即我的输出应该是 24000当我搜索最小值和 我搜索最大值时为50000。
我该如何解决这个问题? 谢谢。
答案 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函数的值。