programing

딕트 목록에서 공통 키의 최소값/최대 값을 찾는 방법은 무엇입니까?

abcjava 2023. 5. 21. 10:43
반응형

딕트 목록에서 공통 키의 최소값/최대 값을 찾는 방법은 무엇입니까?

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

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

나는 그것을 찾고 싶습니다.min()그리고.max()가격.이제 람다 식을 가진 키(다른 스택 오버플로 게시물에서 볼 수 있듯이)를 사용하여 충분히 쉽게 정렬할 수 있으므로 다른 방법이 없으면 꼼짝할 수 없습니다.하지만 제가 본 바로는 파이썬에는 거의 항상 직접적인 방법이 있기 때문에 이것은 제가 조금 더 배울 수 있는 기회입니다.

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

이것은 최대 가격이 얼마인지 뿐만 아니라 어떤 품목이 가장 비싼지도 알려줍니다.

몇 가지 옵션이 있습니다.여기 간단한 것이 있습니다.

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

[편집]

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

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)

제 생각에 가장 직접적인 (그리고 가장 파이썬적인) 표현은 다음과 같은 것일 것입니다.

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

이렇게 하면 목록을 정렬하는 데 드는 오버헤드를 방지할 수 있으며, 목록 이해 대신 생성기 식을 사용하여 목록을 만드는 것도 방지할 수 있습니다.효율적이고, 직접적이고, 읽을 수 있는...천박한 놈!

한 가지 대답은 딕트를 생성기 식 내부의 관심 값에 매핑한 다음 기본 제공 기능을 적용하는 것입니다.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))

언급URL : https://stackoverflow.com/questions/5320871/how-to-find-the-min-max-value-of-a-common-key-in-a-list-of-dicts

반응형