Appia의 IT세상

파이썬[Python] namedtuple - collections 모듈 본문

Python/Python 기본

파이썬[Python] namedtuple - collections 모듈

Appia 2020. 4. 2. 07:20
반응형

이번 포스팅은 collection 모듈에 대해서 조금 더 알아보도록 하겠습니다. 이 전에 counter()라는 함수를 알아봤었습니다. 이번에는 클래스와 매우 유사하지만, 조금 더 쉽게 빠르게 만들 수 있는 namedtuple이라는 부분에 대해서 살펴보도록 하겠습니다. 

 

보틍 튜플의 경우, 인덱스를 통해서 접근이 가능합니다. 하지만, namedtuple의 경우 키 값을 통해서 접근이 가능합니다. 마치 class/딕셔너리와 유사하다고 봐야 합니다. 

 

namedtuple(typename, field_names, verbose = False, rename = False)

 

 namedtuple의 경우 이와 같은 형태를 가지고 있습니다. 그럼 이를 바탕으로 생성하는 부분을 한번 살펴보도록 하겠습니다. 

example)

import collections
 
point = collections.namedtuple('ClassSig',['signal','message'])
 
example = point('Signal1','Message1')
 
print(example)
cs

result) 

ClassSig(signal='Signal1', message='Message1')
cs

위와 같이 namedtuple을 치환받은 변수를 바탕으로 namedtuple를 생성할 수 있습니다. 꼭 Class를 생성하는 느낌을 받습니다. 

 

그럼 관련된 method들에 대해서 살펴보도록 하겠습니다. 

Method Describe
_make(iterable) 리스트 등을 이용한 데이터 시쿼스 기반의 데이터 값을 이용하여 만들 때 사용
_asdict() field와 그에 상응하는 값 반환
_replace() 특정 field의 value 변경시 사용
_fields field에 대한 정보 표시 
_field_defaults 각 필드에 대한 default 값 리턴 

 

그럼 위의 메소드 들에 대해서 한번 살펴보겠습니다. 

example)

import collections
 
point = collections.namedtuple('ClassSig',['signal','message',],defaults = [1])
 
sampleL = ['Signal1','Message1']
 
example = point._make(sampleL)
 
print("example : _asdict()")
 
print(example._asdict())
 
print("example : _replace()")
 
print(example._replace(signal='Signal2'))
 
print("example : _fields")
 
print(example._fields)
 
print("example : _fields_defaults")
 
print(example._fields_defaults)
cs

result) 

example : _asdict()
 
{'signal''Signal1''message''Message1'}
 
example : _replace()
 
ClassSig(signal='Signal2', message='Message1')
 
example : _fields
 
('signal''message')
 
example : _fields_defaults
 
{'message'1}
cs

 

딕셔너리를 namedtuple로 변경하기 

위와 같이 간단한 예제를 통해서 한번 살펴봤습니다. 그럼 좀 더 다른 이야기를 해볼까 합니다. 즉 namedtuple과 비슷한 딕셔너리를 이와 같은 namedtuple로 변경하는 방법에 대해서 살펴보겠습니다. 그럼 바로 예제를 통해서 살펴보겠습니다. 

example)

import collections
 
point = collections.namedtuple('ClassSig',['signal','message',],defaults = [1])
 
sampleL = {'signal':'Signal1','message':'Message1'}
 
example = point(**sampleL)
 
print(example)
cs

result) 

ClassSig(signal='Signal1', message='Message1')
cs

 

단 주의하실 점은 딕셔너리(Dictionary)의 키값과 namedtuple의 키 값이 마져야 합니다. 그렇지 않을 경우 생성이 되지 않습니다. 

파이썬[Python] Counter 함수 - collection 모듈 / 알파벳 사용빈도 확인

 

파이썬[Python] Counter 함수 - collection 모듈 / 알파벳 사용빈도 확인

이번 포스팅은 collection 모듈에 포함되어 있는 Counter 함수에 대해서 살펴보고자 합니다. 실제, 저의 블로그의 유입 하신 분들중에 [파이썬 알파벳 갯수]로 검색해서 들어오신 분이 있었던 것 같습니다. 불행히..

appia.tistory.com

오늘은 간단하게 collection모듈에서의 namedtuple에 대해서 살펴봤습니다. 혹시 counter()에 관련된 부분에 대해서 궁금하시다면 위의 링크를 참조해주시길 바랍니다. 혹 궁금하신점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 

반응형
Comments