네임드 튜플을 사용하면

튜플을 인덱스key로 접근이 가능하다.

 

선언 방법

우선 namedtuple을 import하여 사용한다.

 

from collections import namedtuple

Dog = namedtuple('puppy', 'name age')

namedtuple의 첫번째 인자는 클래스 이름이 들어가고, 두번째 인자는 iterable객체 즉, 반복 가능한 객체가 들어간다.

 

iterable한 객체에는 list, dict, set, tuple, range, str 등이 있다.

 

 

이 외 선언방법은 아래와 같다.

Dog1 = namedtuple('puppy', 'name age') # 공백
Dog2 = namedtuple('puppy', 'name, age') # , 
Dog3 = namedtuple('puppy', ['name', 'age']) # 리스트

 

이 때 기본적으로 중복되는 키 이름이나, 예약어는 사용할 수 없다.

rename옵션을 사용해 이를 해결할 수 있다. (default = False)

Dog4 = namedtuple('puppy', 'name age name age age', rename=True)

 

 

Dog라는 namedtuple(puppy) 클래스를 만들었으니, 객체를 생성해보자.

dog = Dog('meme', 3)
# dog = Dog(name='meme', age=3)

print(Dog)
print(dog)

 

key값이 중복된 Dog4의 객체를 생성해보자.

dog4 = Dog4('meme', '3', 'coco', '2', '1')

print(dog4)

중복되는 키값은 '_인덱스'로 출력된다.

 

 

print(dog._asdict())

 

접근 방법

print(dog.name, dog[0])
print(dog.age, dog[1])

dog.name과 dog.age처럼 key를 통해 접근할 수 있으며, 인덱스로 접근할 수 있다.

 

 

(튜플 값이 무엇을 의미하는지 나타내는 것을 key라고 표현하는 것이다. 정확히 표현하자면 클래스 변수의 접근과 인덱스로 접근이 가능하다가 맞다.)

 

언팩킹

(언팩킹 지난글 참고 : https://sso-y.tistory.com/9)

 

[Python] 튜플(팩킹, 언팩킹)

선언 방법 , 팩킹 t = ('so', 'ye', 'on', '2') t2 = 's', ('so', 'ye', 'on', '2') ('s',) 튜플 선언에서 괄호 () 는 생략 가능 콤마(,) 만 있으면 됨! 원소가 하나일 때는 원소 마지막에 콤마(,) 를 붙이면 tuple 언팩킹

sso-y.tistory.com

 

 

사전형 자료를 언팩킹하여 네임드 튜플을 만들어보자.

 

dog_dic = {'name' : 'coco', 'age' : 2}
dog = Dog(**dog_dic)

print(dog)

dog_dic = {'name' : 'coco', 'age' : 2}
dog = Dog(*dog_dic)

print(dog)

 

*딕셔러니는 key값**딕셔너리는 value값을 가져온다!

 

 

네임드 튜플을 언팩킹 해보자.

dog = Dog(name='meme', age=3)

# 언팩킹
d = *dog
print(d)