我有这样的词典列表:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
我想找到min()和max()价格。现在,我可以使用带有lambda表达式的键(在另一篇SO文章中找到)轻松地对它进行排序,因此,如果没有其他方法,我就不会陷入困境。但是,据我所见,Python中几乎总是有直接方法,因此这是我学习更多知识的机会。
Answers:
有几种选择。这是简单明了的一个:
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)
seq
,并且列表很大,这可能会导致效率低下,因为必须分配整个列表的内存才能找到最大值。
AttributeError: module 'sys' has no attribute 'maxint'
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'])
这不仅告诉您最高价格是多少,还告诉您哪个项目最昂贵。
一种答案是将您的字典映射到生成器表达式内的兴趣值,然后应用内置的min
和max
。
myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)
[
和包围]
,并且实际上生成一个Python列表作为中间步骤。