В список предсказывает, найти минимальное() значение общего поля дикт


У меня есть список словарей, как так:

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

Я хочу найти min() и Max (цены). Теперь я могу сортировать это достаточно легко, используя ключ с лямбда-выражением (как найдено в другой статье SO), поэтому, если нет другого способа, я не застрял. Однако из того, что я видел, почти всегда есть прямой путь в Python, так что это возможность для меня узнать немного больше.

5   51   2011-03-16 06:56:39

5 ответов:

есть несколько вариантов. Вот прямолинейный:

seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)

[Edit]

Если вы только хотели повторить список один раз, вы можете попробовать это (предполагая, что значения могут быть представлены как 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'])

Это говорит вам не только то, что максимальная цена, но и какой элемент является самым дорогим.

Я думаю, что самый прямой (и наиболее подходящие для Python) выражение будет что-то вроде:

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

Это позволяет избежать накладных расходов на сортировку списка - и, используя выражение генератора, вместо понимания списка-на самом деле избегает создания каких-либо списков, а также. Эффективный, прямой, читаемый... Питон!

один ответ будет сопоставлять ваши дикты со значением интереса внутри выражения генератора, а затем применять встроенные min и max.

myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)

можно также использовать это:

from operator import itemgetter

lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]  
max(map(itemgetter('price'), lst))