map(), filter() 함수는 리스트 안의 데이터를 내가 원하는 대로 추출하거나 변형시킬 수 있습니다.
def square(num):
return num**2
number_list = [1, 2, 3, 4, 5]
result = map(square, number_list)
print(result) # <map object at ...>
# for loop -> [1, 4, 9, 16, 25]
print(list(result)) # [1, 4, 9, 16, 25]
# 람다
result = list(map(lambda x: x**2, number_list))
print(result) # [1, 4, 9, 16, 25]
- map()의 리턴 데이터 타입은 map object
- filter() 또한 filter object
리스트 to 리스트를 통해 DB에서 조회한 데이터를 원하는 형태의 Response class로 변형시킬 수 있습니다.
리스트를 dict 타입으로 변형시키는 방법은 아래와 같습니다.
class Order:
id: int
name: str
quantity: int
...
def __init__(self, ...):
self. ...
pass
# 람다를 활용하여 주문 상품 : 개수
orders = [Order(1, "과자", 3), Order(2, "아이스크림", 1), Order(3, "물", 5)]
result = dict(map(lambda x: (x.name, x.quantity), orders))
print(result) # {"과자": 3, "아이스크림": 1, "물": 5}
- 람다식 내부에 (key, value)를 유의
- 람다식 대신에 callable한 값을 넣을 수도 있다. (일급 함수)
from toolz import pipe
numbers = [1, 2, 3, 4, 5]
result = pipe(nums,
lambda x: map(lambda y: y**2, x),
lambda x: filter(lambda y: y > 15, x),
list,
)
print(result) # [16, 25]
- pip install toolz
- map(), filter()를 조합한 데이터 파이프라인을 만들어 볼 수 있습니다.
'Python tips' 카테고리의 다른 글
임시 비밀번호, 랜덤 문자열 generator (0) | 2024.05.08 |
---|---|
@property와 __call__ 비교 (0) | 2024.05.08 |
Pydantic을 활용한 JSON, dict 다루기 (0) | 2024.04.01 |
python-dotenv, pydantic_settings를 통한 환경 변수 관리 (0) | 2024.03.28 |
f-string (0) | 2024.03.28 |