我正在尝试创建一个函数,该函数将任意数量的字典作为参数,并返回具有'qty'
键的最低值的字典。所有词典都具有相同数量的项目,格式如下:
dictA = {'qty':1000, 'color':'red'}
dictB = {'qty':3000, 'color':'red'}
dictC = {'qty':5000, 'color':'red'}
...
我知道如何返回最小值:
def minQty(*args):
return min([i['qty'] for i in args])
但在这种情况下,我无法掌握如何返回字典本身。
所需的输出如下所示:
>>> minQty(dictA, dictB, dictC)
dictA
答案 0 :(得分:3)
对key
函数使用min()
参数;它允许您根据key
的返回值(每个字典调用)选择一个字典:
def minQty(*args):
return min(args, key=lambda d: d['qty'])
您也可以使用operator.itemgetter()
function为密钥创建一个callable,而不是lambda:
from operator import itemgetter
def minQty(*args):
return min(args, key=itemgetter('qty'))
演示:
>>> from operator import itemgetter
>>> dictA = {'qty':1000, 'color':'red'}
>>> dictB = {'qty':3000, 'color':'red'}
>>> dictC = {'qty':5000, 'color':'red'}
>>> def minQty(*args):
... return min(args, key=itemgetter('qty'))
...
>>> minQty(dictA, dictB, dictC)
{'color': 'red', 'qty': 1000}
答案 1 :(得分:3)
您可以使用operator.itemgetter
作为关键字来查找qty
的最低值的字典:
dictA = {'qty':1000, 'color':'red'}
dictB = {'qty':3000, 'color':'red'}
dictC = {'qty':5000, 'color':'red'}
from operator import itemgetter
def minQty(*args):
return min(args,key=itemgetter("qty"))
print(minQty(dictA, dictB, dictC))
如果您可能有可能没有密钥的字谜,那么您应该使用dict.get
,其默认值为float(inf)
:
def minQty(*args):
return min(args, key=lambda x:x.get('qty',float("inf")))