Python collections.namedtuple

namedtuple (네임드 튜플)은 말 그대로 이름을 가지는 튜플 자료형입니다.

namedtuple은 collections 모듈에 포함되어 있습니다.

튜플이 값들만을 가지는 반면 namedtuple은 딕셔너리와 같이 튜플의 각 요소들에 접근할 수 있는 키 (필드명)를 가질 수 있습니다.

딕셔너리와 다르게 namedtuple은 키와 인덱스 모두를 통해 값에 접근할 수 있습니다.

이 페이지에서는 namedtuple을 만들고, 값에 접근하거나 변경하는 방법에 대해 알아봅니다.

순서는 아래와 같습니다.


1. namedtuple 만들기

from collections import namedtuple

book = namedtuple('book', ['title', 'author', 'price'])
book01 = book('Book Title', 'Book Author', 20000)

print(type(book01))
print(book01)
<class '__main__.book'>
book(title='Book Title', author='Book Author', price=20000)

namedtuple은 collections.namedtuple()를 이용해서 만들어집니다.

namedtuple()의 첫번째 인자는 namedtuple의 타입명입니다. type(book01)을 출력해보면 첫번째 인자에서 지정한 ‘book’이 출력됩니다.

namedtuple()의 두번째 인자에는 필드명을 입력합니다. 필드명은 공백 또는 콤마로 구분된 문자열의 시퀀스 (리스트, 튜플)를 입력합니다.


필드명 입력에 대해서 아래의 코드를 참고하세요.

book = namedtuple('book', ['title', 'author', 'price'])     # Correct
book = namedtuple('book', ('title', 'author', 'price'))     # Correct
book = namedtuple('book', 'title author price')             # Correct
book = namedtuple('book', ['title' 'author' 'price'])       # Incorrect
book = namedtuple('book', 'title' 'author' 'price')         # Incorrect

앞에 세 줄은 필드명이 적절하게 입력된 예시이고, 뒤에 두 개는 필드명이 잘못 입력된 예시입니다.



2. 키를 사용해서 접근하기

from collections import namedtuple

book = namedtuple('book', ['title', 'author', 'price'])
book01 = book('Book Title', 'Book Author', 20000)

print('Title:', book01.title)
print('Author:', book01.author)
print('Price:', book01.price)
print('Field Names:', book01._fields)
Title: Book Title
Author: Book Author
Price: 20000
Field Names: ('title', 'author', 'price')

딕셔너리와 유사하게 ‘title, ‘author’, ‘price’와 같은 키를 이용해서 값들에 접근할 수 있습니다.

_field를 이용해서 키 (필드명)의 튜플을 얻을 수 있습니다.



3. 인덱스를 사용해서 접근하기

from collections import namedtuple

book = namedtuple('book', ['title', 'author', 'price'])
book01 = book('Book Title', 'Book Author', 20000)

print('Title:', book01[0])
print('Author:', book01[1])
print('Price:', book01[2])
print('Length:', len(book01))
Title: Book Title
Author: Book Author
Price: 20000
Length: 3

튜플과 유사하게 인덱스를 이용해서 값들에 접근할 수도 있습니다.

파이썬 내장함수 len()을 이용해서 namedtuple의 길이를 얻을 수 있습니다.



4. namedtuple 값 변경하기

from collections import namedtuple

book = namedtuple('book', ['title', 'author', 'price'])
book01 = book('Book Title', 'Book Author', 20000)

# book01.title = 'New Book Title'       # Incorrect
book01_new = book01._replace(title='New Book Title')
print(book01_new.title)
print(book01_new.author)
print(book01_new.price)
New Book Title
Book Author
20000

namedtuple은 튜플과 같이 기본적으로 변경 불가능 (immutable)한 자료형입니다.

값을 변경해서 사용하기 위해서는 _replace()를 이용합니다.

book01_new은 _replace()를 이용해서 값을 변경한 namedtuple입니다.



이전글/다음글