Programing

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

lottogame 2020. 11. 29. 09:30
반응형

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

참고 URL : https://stackoverflow.com/questions/5320871/in-list-of-dicts-find-min-value-of-a-common-dict-field

반응형