我有一个像这样的词典列表:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
我想找到min()和max()价格。现在,我可以使用带有lambda表达式的键(在另一篇SO文章中找到)轻松地对此进行排序,所以如果没有其他方法我就不会卡住。但是,从我所看到的几乎总是在Python中有一个直接的方式,所以这是我学习更多东西的机会。
答案 0 :(得分:160)
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'])
这不仅告诉您最高价格是多少,而且告诉您哪个项目最贵。
答案 1 :(得分:43)
有几种选择。这是一个直截了当的人:
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)
答案 2 :(得分:32)
我认为最直接(也是最Pythonic)的表达方式如下:
min_price = min(item['price'] for item in items)
这避免了对列表进行排序的开销 - 并且,通过使用生成器表达式而不是列表推导 - 实际上也避免了创建任何列表。高效,直接,可读... Pythonic!
答案 3 :(得分:7)
一个答案是将您的dicts映射到生成器表达式中的感兴趣值,然后应用内置插件min
和max
。
myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)
答案 4 :(得分:2)
也可以使用此:
from operator import itemgetter
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
max(map(itemgetter('price'), lst))