118

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

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

我想找到min()价格max()。现在,我可以使用带有 lambda 表达式的键(在另一个 Stack Overflow 帖子中找到)很容易地对它进行排序,所以如果没有其他方法我不会卡住。然而,据我所见,在 Python 中几乎总是有直接的方法,所以这是我学习更多知识的机会。

4

5 回答 5

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

这不仅告诉您最高价格是多少,还告诉您哪个商品最贵。

于 2011-03-16T14:20:56.920 回答
70

有几种选择。这是一个直截了当的:

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)
于 2011-03-16T04:01:25.443 回答
47

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

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

这避免了对列表进行排序的开销——并且通过使用生成器表达式而不是列表推导——实际上也避免了创建任何列表。高效、直接、易读…… Pythonic!

于 2011-03-16T04:00:59.640 回答
12

一个答案是将您的 dicts 映射到生成器表达式中感兴趣的值,然后应用内置的minmax.

myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)
于 2011-03-16T04:00:33.587 回答
4

也可以使用这个:

from operator import itemgetter

lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]  
max(map(itemgetter('price'), lst))
于 2018-09-30T06:23:48.213 回答