如何找到一个公共关键字的最小/最大值在一个字典列表?

我有一个这样的字典列表:

[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]

我想找到 min()max()的价格。现在,我可以很容易地使用一个带有 lambda 表达式的键(如另一篇 Stack Overflow 文章所示)对其进行排序,因此如果没有其他方法,我就不会卡住。然而,从我所看到的来看,Python 中几乎总是有一种直接的方法,所以这对我来说是一个学习更多的机会。

110154 次浏览

一种解决方案是将您的字典映射到生成器表达式中的感兴趣值,然后应用内置的 minmax

myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)

我认为最直接(也是最 Python 化的)的表达方式是这样的:

min_price = min(item['price'] for item in items)

这就避免了对列表进行排序的开销——并且,通过使用生成器表达式而不是列表内涵表达式——实际上也避免了创建任何列表。高效,直接,可读... 蟒蛇!

有几种选择,下面是一个直截了当的选择:

seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)

[编辑]

如果您只想遍历列表一次,您可以尝试这样做(假设值可以表示为 ints) :

import sys


lo,hi = sys.maxint,-sys.maxint-1
for x in (item['the_key'] for item in dict_list):
lo,hi = min(x,lo),max(x,hi)
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]


maxPricedItem = max(lst, key=lambda x:x['price'])
minPricedItem = min(lst, key=lambda x:x['price'])

这不仅告诉你最高价格是多少,而且还告诉你哪个项目是最贵的。

也可以使用这个:

from operator import itemgetter


lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
max(map(itemgetter('price'), lst))