반응형
1. Dict
- tuple, dict 와 함께 정말 많이 쓰는 자료형 중 하나
- 대표적인 hashtable
1) dict
source = (('k1', 'val1'),
('k1', 'val2'),
('k2', 'val3'),
('k2', 'val4'),
('k2', 'val5'))
dic1 = {}
for k, v in source:
if k in new_dict1:
dic1[k].append(v)
else:
dic1[k] = [v]
dic1
>>> {'k1': ['val1', 'val2'], 'k2': ['val3', 'val4', 'val5']}
dic2 = {}
# Use setdefault
for k, v in source:
dic2.setdefault(k, []).append(v)
dic2
>>> {'k1': ['val1', 'val2'], 'k2': ['val3', 'val4', 'val5']}
dic은 기본적으로 key : value 형태로 있으며 각각의 키에 대한 중복을 허용하지 않습니다. 위와 같은 형태의 딕셔너리 타입 설정시 setdefault를 사용하는게 유리합니다.
2) 다양한 딕셔너리 형태
A. Read only(frozen)
- 딕셔너리를 완전히 읽기전용으로 만들어 주는 패키지
- 혹시라도 변경될 경우 심각한 문제를 초래하는 데이터에 사용하면 유용
- types.MappingProxyType(dict)로 사용
# Read Only
d = {'key1': 'value1'}
d_frozen = MappingProxyType(d)
d_frozen['key1'] = 'value2'
>>> raise error
B. defaultdict
- 현재 존재하지 않는 키를 입력해도 자동으로 만들어서 넣어주는 객체
- callable한 객체는 모두 저장 가능 == 파이썬은 일급언어라 함수도 넣을 수 있습니다.
- 원본을 대체(덮어쓰기)
- collections.defaultdict() 로 사용
s = 'mississippi'
d = defaultdict(int)
for k in s:
d[k] += 1
sorted(d.items())
>>> [('i', 4), ('m', 1), ('p', 2), ('s', 4)]
C. Chainmap
- 다수의 딕셔너리 데이터가 있을때 병합과정을 지원한다. 이 때 단순히 다수의 딕셔너리를 합치는게 아니라, 다수의 딕셔너리가 포함된 튜플과 유사한 형태로 나타남
- 엄밀히 말하면 딕셔너리 객체로 볼 수 는 없고 update의 역할을 수행하는데 보다 빠른 속도와 낮은 메모리 점유를 보여주기 때문에 다수의 딕셔너리 처리과정에 유용하게 쓰임
- colletions.Chainmap()
a = {'music': 'woomin', 'art': 'godwoomin'}
b = {'art': 'yamani', 'blog': 'kyle'}
Chainmap(a,b)
>>> ChainMap({'music': 'woomin', 'art': 'godwoomin'}, {'art': 'yamani', 'blog': 'kyle'})
list(Chainmap(a,b))
>>> ['art', 'blog', 'music']
D. Orderdict
- 순서가 저장되는 딕셔너리 형태로 매우 유용하게 사용
- 순서 재배치도 가능(dict.move_to_end(key,last=''))
- colletions.OrderDict()
c = colletions.OrderDict(a=1, b=2, c=3)
c
>>> OrderDict([('a',1),('b',2),('c',3)])
반응형