比较多个词典之间相同键的值

时间:2015-03-22 19:04:50

标签: python dictionary

我正在尝试创建一个函数,该函数将任意数量的字典作为参数,并返回具有'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

2 个答案:

答案 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")))