python/기타

Python namedtuple

Memory! 2024. 3. 30. 16:06
728x90
반응형

먼저 tuple은 immutable 이기 때문에 데이터의 변경이 불가능 합니다.

그러므로 변수내 값을 더이상 변경하지 않고 사용할 때 효과적으로 사용할 수 있습니다.

>> namedtuple의 값은 변경이 가능!

 

기본 tuple의 경우 index로 데이터가 접근 가능하지만

namedtuple의 경우 key를 이용해서 데이터의 접근이 가능합니다.

 

기본 tuple 예시

# tuple 선언
tuple_1 = ('a','b','c',1,2,3)

# index를 통한 데이터 접근
print(tuple[1])
>> b

print(tuple[3])
>> 1

 

namedtuple 예시

# collections으로 부터 namedtuple import
from collections import namedtuple

# namedtuple 정의
Book = namedtuple('book', 'title price, author')

# namedtuple로 변수 선언
book1 = Book('book_title', 25000, 'author_name') # 순서대로 값을 넣는다.

# key를 통해 값을 볼 수 있음
print(book1.title)
>> book_title
print(book1.price)
>> 25000
print(book1.author)
>> author_name

list 를 이용해서도 namedtuple을 선언할 수 있다.

values = ['book_title2', 20000, 'autor_2']

# list를 넘길 때는 *를 사용
book2 = Book(*values)

# key를 사용하여 동일하게 데이터 접근
print(book2.title)
>> book_title2

dict 를 이용해도 선언 가능

book_dict = {'title': 'book3_title', 'price':18000, 'author':'book3_author'}

# dict를 넘기는 경우 **를 이용해서 kwargs 를 넘겨야 함
book3 = Book(**book_dict)

 

※ namedtuple 데이터 변경 방법

_replace(kwargs) 를 이용하여 namedtuple data 변경 가능

book1 = book1._replace(title='book1_title')

print(book1)
>> book(title='book1_title', price=25000, author='author_name')

book1 = book1._replace(**{'title':'book1_title_replace'})
>> book(title='book1_title_replace', price=25000, author='author_name')

 

namedtuple을 dict 타입으로 변환이 가능하다

_asdict 를 이용

# _asdict()를 이용하면 dict 형으로 변환됨
book1_dict = book1._asdict()

print(book1_dict)
>> 'title': 'book1_title_replace', 'price': 25000, 'author': 'author_name'}

 

위 함수를 이용하면 namedtuple과 dict를 적절히 변환하며 사용이 가능하다.

 

728x90
반응형