[python] functools 모듈 reduce() 함수

Minhee kang·2021년 7월 27일
0

Python

목록 보기
17/25
#reduce() 함수
#여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해 사용
#기본 문법 = > reduce(집계 함수, 순회 가능한 데이터[, 초기값])
#=>집계 함수는 두개의 인자를 받아야함
#=>첫번째 인자는 누적자, 두번째 인자는 현재값

from functools import reduce

#user 5명의 데이터 생성
users = [{'mail': 'gregorythomas@gmail.com', 'name': 'Brett Holland', 'sex': 'M', 'age': 73},
{'mail': 'hintoncynthia@hotmail.com', 'name': 'Madison Martinez', 'sex': 'F', 'age': 29},
{'mail': 'wwagner@gmail.com', 'name': 'Michael Jenkins', 'sex': 'M', 'age': 51},
{'mail': 'daniel79@gmail.com', 'name': 'Karen Rodriguez', 'sex': 'F', 'age': 32},
{'mail': 'ujackson@gmail.com', 'name': 'Amber Rhodes', 'sex': 'F', 'age': 42}]

#5명의 user들 나이의 합
print(reduce(lambda acc, cur: acc + cur["age"], users, 0))
#227

#5명의 user들 이메일 목록
print(reduce(lambda acc, cur: acc + [cur["mail"]], users, []))
#['gregorythomas@gmail.com', 'hintoncynthia@hotmail.com', 'wwagner@gmail.com', 'daniel79@gmail.com', 'ujackson@gmail.com']

#5명의 user들을 성별로 분류하기
#가독성을 위해 lambda함수를 사용하지 않고, 따로 함수를 정의함
def names_by_sex(acc, cur):
    sex = cur['sex']
    if sex not in acc:
        acc[sex] = []
    acc[sex].append(cur['name'])
    return acc
print(reduce(names_by_sex, users, {})) 
#{'M': ['Brett Holland', 'Michael Jenkins'], 'F': ['Madison Martinez', 'Karen Rodriguez', 'Amber Rhodes']}

0개의 댓글