Подтвердить что ты не робот

В списке диктов найдите значение min() общего поля Dict

У меня есть список таких как:

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

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

ТИА,

Хэнк Фэй

4b9b3361

Ответ 1

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

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

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

Это говорит вам не только о том, какая максимальная цена, но и какой из них наиболее дорогой.

Ответ 3

Я думаю, что самое прямое (и большинство Pythonic) выражение будет выглядеть примерно так:

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

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

Ответ 4

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

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