728x90
operator.itemgetter(item)
정의 :피연산자의__getitem__() 메서드를 사용하여 피연산자에서 item을 꺼내는 콜러블 객체를 반환합니다.
여러 항목이 지정되면, 조회 값의 튜플을 반환합니다.
핵심
- callable 한 객체 반환 -> 객체에 접근하기 위해 리스트, 딕셔너리 이용
- from operator import itemgetter 선언
- 정렬(sorted)에 사용빈도 높음
정의는 이해하기가 힘들지만 내가 이해한 바로는 item에 값이 아닌 인덱스 정보가 들어가서 해당 인덱스에 맞는 호출 가능한 객체를 반환하는 것으로 이해했다.
또, 여러 인덱스가 지정이 되면 반환 값으로 해당하는 인덱스들의 데이터들을 튜플로 반환한다.
- f = itemgetter(2) 다음에, f(r) 호출은 r[2]를 반환합니다.
- g = itemgetter(2, 5, 3) 다음에, g(r) 호출은 (r [2], r [5], r [3])을 반환합니다.
inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
getcount = itemgetter(1)
list(map(getcount, inventory))
# [3, 2, 5, 1]
sorted(inventory, key=getcount)
# [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
간단한 위의 예시를 보면 itemgetter(1)로 과일의 개수에 대한 정보를 inventory에서 꺼내면 getcount에 callable 한 operator.itemgetter(1) 객체가 반환한다.
그리고 operator.itemgetter이 많이 사용되는 형태가 sorted 할 때인데, key 값으로 callable 한operator.itemgetter객체를operator.itemgetter객체를 넘겨줬을 경우 과일 개수(오름차순)로 정렬이 가능한 것을 볼 수 있다.
대표적인 정렬에서의 사용 예시
from operator import itemgetter
inventory = [('apple', 3, 500), ('banana', 2, 1000), ('pear', 5, 2000), ('orange', 1, 300)]
for name in sorted(inventory, key = itemgetter(0)):
print(name)
print()
for count in sorted(inventory, key = itemgetter(1)):
print(count)
print()
for price in sorted(inventory, key = itemgetter(2)):
print(price)
itemgetter의 item에 따라서 과일 이름(itemgetter(0))으로 정렬할지, 과일 개수(itemgetter(1))으로 정렬할지, 과일 가격(itemgetter(2))으로 정렬할지 key 값으로 결정되는 것을 확인할 수 있다.
* 평소에 정렬에서 key로 사용하는 lambda 말고 itemgetter을 사용해보자
'python' 카테고리의 다른 글
[python] lambda/map/filter (0) | 2022.04.03 |
---|---|
[python] csv (0) | 2022.04.03 |
[python] string.punctuation (2) | 2022.03.30 |
[python] 딕셔너리/JSON/집합 (0) | 2022.01.29 |
[python] 파일 다루기/데이터 구조 다루기/리스트 컴프리헨션/튜플 정렬 (0) | 2022.01.29 |
댓글