namedtuple은 C언어 Struct와 같이 Value를 여러 개 저장해서 Variable 이름으로 접근이 가능하다. 개인적으로 C Struct와 비슷해서 사용하게 되었다. 출처 1에 따르면 namedtuple은 Python 기본자료형이 아니라고 한다. namedtuple을 사용하기 위해서는 아래와 같이 Collections를 추가해야 한다.
- from collections import namedtuple
namedtuple 사용하기
출처 1에 제공하는 예제를 조금 변경하여서 아래 예제 코드를 하나 작성하였다.
from collections import namedtuple #MK: Create namedtuple (like C-Struct) PersonalInfo = namedtuple("pInfo", "name age phoneNum") #MK: Create two personal information (namedtuple의 name, age, phoneNum등의 Variable 이름을 사용하지 않아도 됨) mkInfo = PersonalInfo(name="MK", age=35, phoneNum="010-010-0101") mkInfo2 = PersonalInfo("MK2", 40, "010-111-0101") #MK: Print namedtuple values print(mkInfo.name) print(mkInfo.age) print(mkInfo.phoneNum) print(mkInfo2.name) print(mkInfo2.age) print(mkInfo2.phoneNum)
그림1: namedtuple Example 결과
위 그림1은 위 예제 코드를 실행한 결과 화면이다.
- “PersonalInfo = namedtuple(“pInfo”, “name age phoneNum”)”은 C Struct와 같이 PersonalInfo라는 Struct 형태의 namedtuple을 생성한다.
- PersonalInfo를 사용해서 mkInfo, mkInfo2 값을 생성하였다.
- mkInfo.name, mkInfo.phoneNum, mkInfo.age 등으로 저장한 값을 읽을 수 있다.
namedtuple + list 사용하기
namedtuple과 list를 사용하여 많은 데이터를 쉽게 관리할 수 있는 것 같다 (출처2). 아래 예제 코드 역시 출처 1 코드를 약간 수정하였다.
from operator import attrgetter from collections import namedtuple #MK: 총 3개의 PersonalInfo namedtuple을 생성함 PersonalInfo=namedtuple("pInfo", "name age phoneNum") mkInfo=PersonalInfo(name="MK", age=35, phoneNum="010-010-0101") mkInfo2=PersonalInfo("MK2", 40, "010-111-1111") mkInfo3=PersonalInfo("MK3", 37, "111-000-1111") #MK: 3개의 namedtuple을 list에 추가함 personalInfoList=[] personalInfoList.append(mkInfo) personalInfoList.append(mkInfo2) personalInfoList.append(mkInfo3) #MK: 추가된 순서대로 출력됨 print(personalInfoList) #MK: 나이순으로 정렬된 리스트를 출력함 sortedPersonalInfoList=sorted(personalInfoList, key=attrgetter("age")) print(sortedPersonalInfoList) #MK: 나이 역순으로 정렬된 리스트를 출력함 sortedPersonalInfoList=sorted(personalInfoList, key=attrgetter("age"), reverse=True) print(sortedPersonalInfoList) #MK: 전화번호를 순서대로 정렬함 sortedPersonalInfoList=sorted(personalInfoList, key=attrgetter("phoneNum")) print(sortedPersonalInfoList)
그림 2: namedtuple + list Example 결과
위 그림2는 namedtuple + list 예제 코드를 실행한 결과이다.
- “personalInfoList.append(mkInfo)”은 namedtuple로 생성한 값은 list에 추가한다. 위 예제에서는 총 3개의 PersonalInfo를 추가하였다.
- “sortedPersonalInfoList=sorted(personalInfoList, key=attrgetter(“age”))”은 age 값을 기준으로 Sorting을 진행한다. attrgetter을 사용하기 위해서 “from operator import attrgetter”를 추가해야 한다.
- sorted 뒤에 “reverse=True”를 추가하면 역순으로 Sorting을 진행한다 (출처 3).
위와 같이 namedtuple을 list와 같이 사용하면 데이터를 효율적으로 관리할 수 있는 것 같다.
실험환경
- Python Version: 3.7
- OS: Ubuntu Linux 18.04
출처
- https://thrillfighter.tistory.com/454
- https://stackoverflow.com/questions/12087905/pythonic-way-to-sorting-list-of-namedtuples-by-field-name
- https://www.programiz.com/python-programming/methods/built-in/sorted