如何在字典列表中找到公共键的最小/最大值?
我有一个字典列表,长这样:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
我想找出这些字典里价格的最小值和最大值。现在,我可以用一个简单的方法来排序,使用一个带有lambda表达式的关键字(在另一个Stack Overflow的帖子里找到了这个方法),所以如果没有其他办法,我也不怕。不过,从我看到的情况来看,Python里几乎总是有更直接的方法,所以这是我学习更多知识的好机会。
6 个回答
55
我觉得最直接(也是最符合Python风格)的写法可以是这样的:
min_price = min(item['price'] for item in items)
这样做可以避免对列表进行排序的额外开销。而且,通过使用生成器表达式,而不是列表推导式,实际上也避免了创建任何列表。这样做既高效,又直接,容易理解……真是Python风格!
75
这里有几种选择。下面是一个简单直接的方法:
seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)
[编辑]
如果你只想遍历这个列表一次,可以试试这个方法(假设这些值可以用 int
来表示):
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)
383
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'])
这段话告诉你,不仅仅是最高价格是多少,还告诉你哪个物品是最贵的。