[python] Dict 목록에서 공통 Dict 필드의 min () 값을 찾습니다.

다음과 같은 사전 목록이 있습니다.

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

min () 및 max () 가격을 찾고 싶습니다. 이제 람다식이있는 키를 사용하여 쉽게 정렬 할 수 있습니다 (다른 SO 문서에서 찾을 수 있음). 다른 방법이 없다면 멈춰 있지 않습니다. 그러나 제가 본 것에는 거의 항상 파이썬에 직접적인 방법이 있습니다. 그래서 이것은 제가 조금 더 배울 수있는 기회입니다.



답변

몇 가지 옵션이 있습니다. 다음은 간단합니다.

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

[편집하다]

목록을 한 번만 반복하려는 경우 다음을 시도 할 수 있습니다 (값이 ints 로 표시 될 수 있다고 가정 ).

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!


답변

한 가지 대답은 생성기 표현식 내에서 관심있는 값에 사전을 매핑 한 다음 내장 minmax.

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


답변