반응형
1. 네임드 튜플
네임드 튜플은 collections 에 내장된 모듈로 값이 변경되지 않는 튜플의 성격과 키와 값을 갖는 딕셔너리의 성격을 모두 갖고 있는 형식입니다. 클래스 형식으로 선언하여 사용합니다. 네임드 튜플은 자료의 양이 많고 여러 정보가 연결되어 있을 때 관리에 굉장한 편의성을 제공합니다.
1. 네임드 튜플 선언
from collections import namedtuple
# 네임드 튜플 선언 방법
Point = namedtuple('Point', 'x y z')
#Point = namedtuple('Point', ['x', 'y', 'z'])
#Point = namedtuple('Point', 'x, y, z')
#Point = namedtuple('Point', 'x x class', rename=True)
2. 네임드 튜플과 일반 튜플의 차이
#일반 튜플
pt = (1.0, 2.0, 3.0)
#네임드 튜플 생성
pt1 = Point(1.0, 2.0, 3.0)
#pt1 = Point(x=1.0, y=2.0, z=3.0)
print(pt)
>>>(1.0, 2.0, 3.0)
print(pt1)
>>>Point(x=1.0, y=2.0, z=3.0)
# 4번째 방법을 쓰는 경우 : Point(x=1.0, _1 = 2.0, _2 = 3.0)
2. 네임드 튜플의 메서드와 다양한 활용방법
1. 튜플값 접근
# 일반 튜플 값 접근
print(pt[0]+pt[1])
>>> 3
# 네임드 튜플 값 접근 (인덱스 접근도 가능)
print(pt1.x + pt1.y)
>>> 3
2. 다른 자료형과의 변환
# dict -> namedtuple
dicts = {'x' : 10, 'y' : 20, 'z' : 40}
pt2 = Point(**dicts)
print(pt2)
>>> Point(x=10, y=20, z=40)
# list -> namedtuple
lists = [10, 20, 30]
pt3 = Point._make(lists)
print(pt3)
>>> Point(x=10, y=20, z=30)
# namedtuple -> ordereddict
print(pt3._asdict())
>>> OrderedDict([('x', 10), ('y', 20), ('z', 30)])
#unpacking
x, y, z = pt2
3. 활용 예시
# 멜론 top 100의 순위와 가수를 가져왔을 경우
MelonChart = namedtuple('MelonChart', 'rank, artist')
melon_top_rank = [MelonChart(rank, artist)
for rank in chart_rank
for artist in artist_list]
print(melon_top_rank)
>>>MelonChart(rank='1', artist='OOO') ......
반응형