在列表中,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式中的感兴趣的值,然后应用内置的min
和max
。
myMax = max(d['price'] for d in myList) myMin = min(d['price'] for d in myList)