다음과 같은 사전 목록이 있습니다.
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
min () 및 max () 가격을 찾고 싶습니다. 이제 람다식이있는 키를 사용하여 쉽게 정렬 할 수 있습니다 (다른 SO 문서에서 찾을 수 있음). 다른 방법이 없다면 멈춰 있지 않습니다. 그러나 제가 본 것에는 거의 항상 파이썬에 직접적인 방법이 있습니다. 그래서 이것은 제가 조금 더 배울 수있는 기회입니다.
답변
몇 가지 옵션이 있습니다. 다음은 간단합니다.
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)
답변
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'])
이것은 최대 가격이 얼마인지뿐만 아니라 어떤 품목이 가장 비싼 지 알려줍니다.
답변
나는 가장 직접적인 (그리고 대부분의 Pythonic) 표현은 다음과 같을 것이라고 생각합니다.
min_price = min(item['price'] for item in items)
이렇게하면 목록을 정렬하는 오버 헤드를 피할 수 있습니다. 목록 이해력 대신 생성기 표현식을 사용하면 실제로 목록을 만들지 않아도됩니다. 효율적이고 직접적이며 읽기 쉬운 … Pythonic!
답변
한 가지 대답은 생성기 표현식 내에서 관심있는 값에 사전을 매핑 한 다음 내장 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))