Namedtuple(네임드튜플)에 들어가기 앞서, 파이썬을 공부해보신 분들이라면 Tuple(튜플) 자료구조를 알고 계실 겁니다.
Tuple은 불변한 순서가 있는 Immutable 한 객체로, 한번 생성되면 값을 변경할 수 없습니다.
튜플은 튜플에 있는 요소를 접근할 때 순서를 기억해서 순서로 접근해야 한다는 단점이 있습니다.
또한, 파이썬을 공부할 때 분명히 배우는 자료형으로 Dictionary(딕셔너리)가 존재합니다.
Dictionary는 순서가 없는 key-value 쌍의 데이터 집합입니다.
Namedtuple은 이 둘의 장점을 모두 갖추고 있습니다.
Namedtuple
namedtuple은 collections 모듈에서 제공됩니다.
namedtuple 은 클래스처럼 객체를 생성할 수 있으며 Tuple 처럼 Immutable(불변한) 타입이고 Dictionary 처럼 값에 대한 label 을 부여할 수 있습니다.
1. 정의 & 사용 방식
namedtuple은 약 4가지의 방식으로 정의하여 사용할 수 있습니다.
- 리스트로 구분하여 정의
# namedtuple 선언
Book1 = namedtuple('Book', ['title', 'price'])
# namedtuple 사용
b1 = Book1('개발자로 성공하기', '13000')
print(b1)
- 띄어쓰기로 정의
# namedtuple 선언
Book2 = namedtuple('Book', 'title price')
# namedtuple 사용
b2 = Book2('개발자로 성공하기', '13000')
print(b2)
결과는 위와 동일합니다.
- 콤마로 구분하여 정의
# namedtuple 선언
Book3 = namedtuple('Book', 'title, price')
# namedtuple 사용
b3 = Book3('개발자로 성공하기', '13000')
print(b3)
결과는 위와 동일합니다.
- 같은 Key가 중복되거나 예약어를 사용하는 경우, rename = True 사용하여 정의
# namedtuple 선언
Book4 = namedtuple('Book', 'title price title class', rename=True)
# namedtuple 사용
b4 = Book4('개발자로 성공하기', '13000', '개발자로 성공하기 v2', 'Class값 받아보기')
print(b4)
rename=True 를 사용하여 정의하는 방식은 앞선 위 방식들과는 조금 다릅니다.
Book4 변수에 할당한 namedtuple에는 인자를 4개를 받게 작성되어 있습니다.
그렇기 때문에, 기존처럼 2개의 인자만 넣어준다면 에러가 발생하게 됩니다.
namedtuple을 선언할 때, 'title' 의 값이 중복되기 때문에 그리고 예약어인 'class' 를 인자로 받고 있기 때문에 'rename=True' 옵션을 같이 작성해 주어야 합니다.
형식대로 값을 넣어서 namedtuple 을 사용하고 결과를 출력 해보면 아래와 같이 출력됩니다.
중복되는 Key(label)와 인자 이름으로 사용할 수 없는 키워드는 파이썬이 임의로 Key 이름을 정해서 출력하게 됩니다.
어차피 순서대로 숫자가 증가하는 Key 이름이겠지만요.
한 가지 사용방법을 알려드리면, Dictionary 를 unpacking 하여 사용할 수도 있습니다.
b5 = {'title' : '개발자로 성공하기', 'price' : 13000}
print(Book3(**b5))
2. namedtuple 메서드
- _make
새로운 인스턴스를 생성합니다.
b6 = ('피곤해도 이겨내요!', '8700')
print(Book1._make(b6))
b7 = ['이것저것 다 해보며 살아보아요', '123400']
print(Book1._make(b7))
- _asdict
namedtuple을 dict 형식으로 변경합니다.
_asdict 메서드는 dict 으로 변경하여 (이때 OrderedDict으로 변경), json.dumps를 사용하여 Json 으로 변경할 때 사용할 수 있습니다.
b8 = Book3('회사에 갔다와도 힘이 넘쳐요!!', '9494')
dict8 = b8._asdict()
print(dict8)
- _replace
지정된 필드를 새 값으로 대체하며 기존과 다른 새로운 인스턴스를 반환합니다. (Immutable 특성)
# namedtuple 을 사용할 때, 필드명과 함께 값을 지정해주어야 합니다.
b9 = Book2(title='끝이 없는 테스트 잘 하는 방법', price='28000')
print(b9._replace(price='27000'))
print(b9) # b9의 값이 바뀐것이 아닌, 새로운 인스턴스가 생성된다.
- _fields
필드 이름을 나열합니다.
print(b8._fields)
'Python' 카테고리의 다른 글
[Python] 파이썬으로 JSON 데이터를 다루는 방법 (0) | 2025.01.29 |
---|---|
[Python] 일급 함수 정의와 특징 (0) | 2025.01.25 |
[Python] glob 모듈을 사용하여 파일 탐색하기 (0) | 2025.01.20 |
[Python] os 모듈 사용방법 - 파이썬을 사용하여 파일을 생성하고 읽고 써보자 (0) | 2025.01.19 |
[Python] map() filter() reduce() 사용법 정리 (0) | 2025.01.17 |