在列表中,find一个普通字典字段的min()值

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

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

我想findmin()和max()价格。 现在,我可以很容易地使用一个带有lambdaexpression式的键(在另一个SO文章中find)对其进行sorting,因此,如果没有其他方法,我不会卡住。 然而,从我看到的几乎总是有一个Python的直接方式,所以这是一个机会,让我学习更多一点。

TIA,

汉克费伊

有几个选项。 这是一个简单的方法:

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

[编辑]

如果你只想遍历列表一次,你可以尝试这个(假设值可以表示为int s):

 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']) 

这不仅告诉你最高价格是多less,而且是最昂贵的。

我认为最直接的(也是最Pythonic)expression方式就是这样的:

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

这避免了对列表进行sorting的开销 – 而且,通过使用生成器expression式而不是列表理解 – 实际上也避免了创build任何列表。 高效,直接,可读… Pythonic!

一个答案就是将你的字典映射到一个生成器expression式中的感兴趣的值,然后应用内置的minmax

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