반응형

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') ......
반응형
복사했습니다!