В списке диктов найдите значение min() общего поля Dict
У меня есть список таких как:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
Я хочу найти цены min() и max(). Теперь я могу сортировать это достаточно легко, используя ключ с выражением лямбда (как показано в другой статье SO), поэтому, если нет другого способа, я не застрял. Однако из того, что я видел, в Python почти всегда есть прямой путь, так что это возможность для меня узнать немного больше.
ТИА,
Хэнк Фэй
Ответы
Ответ 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)